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