Auto: Daily job definition
[releng.git] / utils / create_pod_file.py
1 import os
2 import yaml
3 from opnfv.deployment import factory
4 import argparse
5
6
7 parser = argparse.ArgumentParser(description='OPNFV POD Info Generator')
8
9 parser.add_argument("-t", "--INSTALLER_TYPE", help="Give INSTALLER_TYPE")
10 parser.add_argument("-i", "--INSTALLER_IP", help="Give INSTALLER_IP")
11 parser.add_argument("-u", "--user", help="Give username of this pod")
12 parser.add_argument("-k", "--key", help="Give key file of the user")
13 parser.add_argument("-p", "--password", help="Give password of the user")
14 parser.add_argument("-f", "--filepath", help="Give dest path of output file")
15 parser.add_argument("-s", "--sshkey", default="/root/.ssh/id_rsa",
16                     help="Give the path for ssh key")
17 args = parser.parse_args()
18
19
20 def check_params():
21     """
22     Check all the CLI inputs. Must give INSTALLER_TYPE, INSTALLER_IP, user
23     and filepath of the output file.
24     Need to give key or password.
25     """
26     if not args.INSTALLER_TYPE or not args.INSTALLER_IP or not args.user:
27         print("INSTALLER_TYPE, INSTALLER_IP and user are all needed.")
28         return False
29     if not args.key and not args.password:
30         print("key and password are all None. At least providing one.")
31         return False
32     if not args.filepath:
33         print("Must give the dest path of the output file.")
34         return False
35     return True
36
37
38 def get_with_key():
39     """
40     Get handler of the nodes info with key file.
41     """
42     return factory.Factory.get_handler(args.INSTALLER_TYPE, args.INSTALLER_IP,
43                                        args.user, pkey_file=args.key)
44
45
46 def get_with_passwd():
47     """
48     Get handler of the nodes info with password.
49     """
50     return factory.Factory.get_handler(args.INSTALLER_TYPE, args.INSTALLER_IP,
51                                        args.user, installer_pwd=args.password)
52
53
54 def create_file(handler, INSTALLER_TYPE):
55     """
56     Create the yaml file of nodes info.
57     As Yardstick required, node name must be node1, node2, ... and node1 must
58     be controller.
59     Compass uses password of each node.
60     Other installers use key file of each node.
61     """
62     if not os.path.exists(os.path.dirname(args.filepath)):
63         os.makedirs(os.path.dirname(args.filepath))
64     nodes = handler.nodes
65     node_list = []
66     index = 1
67     user = 'root'
68     if INSTALLER_TYPE == 'apex':
69         user = 'heat-admin'
70     for node in nodes:
71         try:
72             if node.roles[0].lower() == "controller":
73                 node_info = {'name': "node%s" % index, 'role': node.roles[0],
74                              'ip': node.ip, 'user': user}
75                 node_list.append(node_info)
76                 index += 1
77         except Exception:
78             node_info = {'name': node.name, 'role': 'unknown', 'ip': node.ip,
79                          'user': user}
80             node_list.append(node_info)
81     for node in nodes:
82         try:
83             if node.roles[0].lower() == "compute":
84                 node_info = {'name': "node%s" % index, 'role': node.roles[0],
85                              'ip': node.ip, 'user': user}
86                 node_list.append(node_info)
87                 index += 1
88         except Exception:
89             node_info = {'name': node.name, 'role': 'unknown', 'ip': node.ip,
90                          'user': user}
91             node_list.append(node_info)
92     if args.INSTALLER_TYPE == 'compass':
93         for item in node_list:
94             item['password'] = 'root'
95     elif args.INSTALLER_TYPE == 'daisy':
96         for item in node_list:
97             item['key_filename'] = '/root/.ssh/id_dsa'
98     else:
99         for item in node_list:
100             item['key_filename'] = args.sshkey
101     data = {'nodes': node_list}
102     with open(args.filepath, "w") as fw:
103         yaml.dump(data, fw)
104
105
106 def main():
107     if not check_params():
108         return 1
109     if args.key:
110         handler = get_with_key()
111     else:
112         handler = get_with_passwd()
113     if not handler:
114         print("Error: failed to get the node's handler.")
115         return 1
116     create_file(handler, args.INSTALLER_TYPE)
117
118
119 if __name__ == '__main__':
120     main()