Decouple TXT Report file writing and formatting logic (6/6)
[sdc.git] / catalog-be / src / main / resources / scripts / import / tosca / upgradeHeatAndNormativeTypes.py
1 from importNormativeTypes import *
2
3
4 ################################################################################################################################################################################################
5 #                                                                                                                                                                                                                                                                                                                                      #
6 # Upgrades all Heat and Normative types confiugred in "typesToUpgrade.json" file                                                                                                                                                                                                                       #
7 #                                                                                                                                                                                                                                                                                                                                          #
8 # activation                                                                                                                                                                                   #
9 #       python upgradeHeatAndNormativeTypes.py [-s <scheme> | --scheme=<scheme> ] [-i <be host> | --ip=<be host>] [-p <be port> | --port=<be port> ] [-f <input file> | --ifile=<input file> ] #
10 #                                                                                                                                                                                                                                                                                                                                          #
11 # shortest activation (be host = localhost, be port = 8080):                                                                                                                                                                                                               #
12 #               python upgradeHeatAndNormativeTypes.py [-f <input file> | --ifile=<input file> ]                                                                                                                                                                       #
13 #                                                                                                                                                                                                                                                                                                                                      #
14 ################################################################################################################################################################################################
15
16
17 def upgradeTypesPerConfigFile(scheme, be_host, be_port, admin_user, base_dir, update_version):
18     response_codes = [200, 201]
19     if update_version == 'false':
20         response_codes = [200, 201, 409]
21     with open("typesToUpgrade.json", 'r') as stream:
22         try:
23             types = json.load(stream)
24             heat_types = types["heat"]
25             debug(heat_types)
26             normative_types = types["normative"]
27             debug(normative_types)
28             heat_file_dir = base_dir + "heat-types/"
29             debug(heat_file_dir)
30             normative_file_dir = base_dir + "normative-types/"
31             debug(normative_file_dir)
32             results = []
33             for heat_type in heat_types:
34                 result = createNormativeType(scheme, be_host, be_port, admin_user, heat_file_dir,
35                                              heat_type.encode('ascii', 'ignore'), update_version)
36                 results.append(result)
37                 if result[1] is None or result[1] not in response_codes:
38                     print "Failed creating heat type " + heat_type + ". " + str(result[1])
39             for normativeType in normative_types:
40                 result = createNormativeType(scheme, be_host, be_port, admin_user, normative_file_dir,
41                                              normativeType.encode('ascii', 'ignore'), update_version)
42                 results.append(result)
43                 if result[1] is None or result[1] not in response_codes:
44                     print "Failed creating normative type " + normativeType + ". " + str(result[1])
45             return results
46         except Exception as exc:
47             print(exc)
48
49
50 def main(argv):
51     print 'Number of arguments:', len(sys.argv), 'arguments.'
52
53     be_host = 'localhost'
54     be_port = '8080'
55     admin_user = 'jh0003'
56     update_version = 'true'
57     scheme = 'http'
58
59     try:
60         opts, args = getopt.getopt(argv, "i:p:u:v:h:s:", ["ip=", "port=", "user=", "updateversion=", "scheme="])
61     except getopt.GetoptError:
62         usage()
63         error_and_exit(2, 'Invalid input')
64
65     for opt, arg in opts:
66         # print opt, arg
67         if opt == '-h':
68             usage()
69             sys.exit(3)
70         elif opt in ("-i", "--ip"):
71             be_host = arg
72         elif opt in ("-p", "--port"):
73             be_port = arg
74         elif opt in ("-u", "--user"):
75             admin_user = arg
76         elif opt in ("-s", "--scheme"):
77             scheme = arg
78         elif opt in ("-v", "--updateversion"):
79             if arg.lower() == "false" or arg.lower() == "no":
80                 update_version = 'false'
81
82     print 'scheme =', scheme, ', be host =', be_host, ', be port =', be_port, ', user =', admin_user
83
84     if be_host is None:
85         usage()
86         sys.exit(3)
87
88     results = upgradeTypesPerConfigFile(scheme, be_host, be_port, admin_user, "../../../import/tosca/", update_version)
89
90     print "-----------------------------"
91     for result in results:
92         print "{0:20} | {1:6}".format(result[0], result[1])
93     print "-----------------------------"
94
95     response_codes = [200, 201]
96
97     if update_version == 'false':
98         response_codes = [200, 201, 409]
99
100     failed_normatives = filter(lambda x: x[1] is None or x[1] not in response_codes, results)
101     if len(list(failed_normatives)) > 0:
102         error_and_exit(1, None)
103     else:
104         error_and_exit(0, None)
105
106
107 if __name__ == "__main__":
108     main(sys.argv[1:])