blob: b97904b7e7585692cb196b5f5dfda3c5a73cfae0 [file] [log] [blame]
BjornMagnussonXAbbd2e9d2020-05-27 21:24:06 +02001# ============LICENSE_START===============================================
2# Copyright (C) 2020 Nordix Foundation. All rights reserved.
3# ========================================================================
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15# ============LICENSE_END=================================================
16#
17
18# This script create/update policies spread over a number rics
19# Intended for parallel processing
20# Returns a string with result, either "0" for ok, or "1<fault description>"
21
22import os
23import json
24import sys
25import requests
BjornMagnussonXA048aaa12020-06-04 07:48:37 +020026import traceback
BjornMagnussonXA49f0e5a2020-11-08 22:41:39 +010027from time import sleep
BjornMagnussonXAbbd2e9d2020-05-27 21:24:06 +020028
29# disable warning about unverified https requests
30from requests.packages import urllib3
31
32urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
33
BjornMagnussonXAbe9a07f2021-02-25 10:51:46 +010034#arg responsecode baseurl ric_base num_rics uuid startid templatepath count pids pid_id proxy
BjornMagnussonXA4207b832020-11-03 09:52:49 +010035data_out=""
36url_out=""
BjornMagnussonXAbbd2e9d2020-05-27 21:24:06 +020037try:
BjornMagnussonXAbbd2e9d2020-05-27 21:24:06 +020038
BjornMagnussonXAbe9a07f2021-02-25 10:51:46 +010039 if len(sys.argv) < 12:
40 print("1Expected 12/15 args, got "+str(len(sys.argv)-1))
BjornMagnussonXA4207b832020-11-03 09:52:49 +010041 print (sys.argv[1:])
42 sys.exit()
BjornMagnussonXAbbd2e9d2020-05-27 21:24:06 +020043 responsecode=int(sys.argv[1])
BjornMagnussonXA4207b832020-11-03 09:52:49 +010044 baseurl=str(sys.argv[2])
45 ric_base=str(sys.argv[3])
BjornMagnussonXAbbd2e9d2020-05-27 21:24:06 +020046 num_rics=int(sys.argv[4])
BjornMagnussonXA4207b832020-11-03 09:52:49 +010047 uuid=str(sys.argv[5])
BjornMagnussonXAad047782020-06-08 15:54:11 +020048 start=int(sys.argv[6])
BjornMagnussonXAbe9a07f2021-02-25 10:51:46 +010049 httpproxy="NOPROXY"
BjornMagnussonXA4207b832020-11-03 09:52:49 +010050 if ("/v2/" in baseurl):
BjornMagnussonXAbe9a07f2021-02-25 10:51:46 +010051 if len(sys.argv) != 16:
52 print("1Expected 15 args, got "+str(len(sys.argv)-1)+ ". Args: responsecode baseurl ric_base num_rics uuid startid service type transient notification-url templatepath count pids pid_id proxy")
BjornMagnussonXA4207b832020-11-03 09:52:49 +010053 print (sys.argv[1:])
54 sys.exit()
55
56 serv=str(sys.argv[7])
57 pt=str(sys.argv[8])
58 trans=str(sys.argv[9])
59 noti=str(sys.argv[10])
60 templatepath=str(sys.argv[11])
61 count=int(sys.argv[12])
62 pids=int(sys.argv[13])
63 pid_id=int(sys.argv[14])
BjornMagnussonXAbe9a07f2021-02-25 10:51:46 +010064 httpproxy=str(sys.argv[15])
BjornMagnussonXA4207b832020-11-03 09:52:49 +010065 else:
BjornMagnussonXAbe9a07f2021-02-25 10:51:46 +010066 if len(sys.argv) != 12:
67 print("1Expected 11 args, got "+str(len(sys.argv)-1)+ ". Args: responsecode baseurl ric_base num_rics uuid startid templatepath count pids pid_id proxy")
BjornMagnussonXA4207b832020-11-03 09:52:49 +010068 print (sys.argv[1:])
69 sys.exit()
70
71 templatepath=str(sys.argv[7])
72 count=int(sys.argv[8])
73 pids=int(sys.argv[9])
74 pid_id=int(sys.argv[10])
BjornMagnussonXAbe9a07f2021-02-25 10:51:46 +010075 httpproxy=str(sys.argv[11])
BjornMagnussonXAad047782020-06-08 15:54:11 +020076
BjornMagnussonXAbe9a07f2021-02-25 10:51:46 +010077 proxydict=None
78 if httpproxy != "NOPROXY":
79 proxydict = {
80 "http" : httpproxy,
81 "https" : httpproxy
82 }
BjornMagnussonXAad047782020-06-08 15:54:11 +020083 if uuid == "NOUUID":
84 uuid=""
BjornMagnussonXAbbd2e9d2020-05-27 21:24:06 +020085
86 with open(templatepath, 'r') as file:
87 template = file.read()
88
89 start=start
90 stop=count*num_rics+start
91
BjornMagnussonXA49f0e5a2020-11-08 22:41:39 +010092 total_retry_count=0
93
BjornMagnussonXAbbd2e9d2020-05-27 21:24:06 +020094 for i in range(start,stop):
95 if (i%pids == (pid_id-1)):
96 payload=template.replace("XXX",str(i))
97 ric_id=(i%num_rics)+1
98 ric=ric_base+str(ric_id)
BjornMagnussonXA4207b832020-11-03 09:52:49 +010099
BjornMagnussonXA49f0e5a2020-11-08 22:41:39 +0100100 retry_cnt=5
101 while(retry_cnt>0):
102 try:
103 headers = {'Content-type': 'application/json'}
104 if ("/v2/" in baseurl):
105 url=baseurl
BjornMagnussonXA4207b832020-11-03 09:52:49 +0100106
BjornMagnussonXA49f0e5a2020-11-08 22:41:39 +0100107 data={}
108 data["ric_id"]=ric
109 data["policy_id"]=uuid+str(i)
110 data["service_id"]=serv
111 if (trans != "NOTRANSIENT"):
112 data["transient"]=trans
113 if (pt != "NOTYPE"):
114 data["policytype_id"]=pt
115 else:
116 data["policytype_id"]=""
117 if (noti != "NOURL"):
118 data["status_notification_uri"]=noti
119 data["policy_data"]=json.loads(payload)
120
121 url_out=url
122 data_out=json.dumps(data)
BjornMagnussonXA4207b832020-11-03 09:52:49 +0100123 else:
BjornMagnussonXA49f0e5a2020-11-08 22:41:39 +0100124 url=baseurl+"&id="+uuid+str(i)+"&ric="+str(ric)
125 url_out=url
126 data_out=json.dumps(json.loads(payload))
BjornMagnussonXAbe9a07f2021-02-25 10:51:46 +0100127 if proxydict is None:
128 resp=requests.put(url, data_out, headers=headers, verify=False, timeout=90)
129 else:
130 resp=requests.put(url, data_out, headers=headers, verify=False, timeout=90, proxies=proxydict)
BjornMagnussonXA49f0e5a2020-11-08 22:41:39 +0100131 except Exception as e1:
132 print("1Put failed for id:"+uuid+str(i)+ ", "+str(e1) + " "+traceback.format_exc())
133 sys.exit()
134
135 if (resp.status_code == None):
136 print("1Put failed for id:"+uuid+str(i)+ ", expected response code: "+str(responsecode)+", got: None")
137 sys.exit()
138
139 if (resp.status_code != responsecode):
140 if (resp.status_code == 503 ) and (retry_cnt > 1):
141 sleep(0.1)
142 retry_cnt -= 1
143 total_retry_count += 1
144 else:
145 print("1Put failed for id:"+uuid+str(i)+ ", expected response code: "+str(responsecode)+", got: "+str(resp.status_code))
146 print(url_out)
147 print(str(data_out))
148 sys.exit()
BjornMagnussonXA4207b832020-11-03 09:52:49 +0100149 else:
BjornMagnussonXA49f0e5a2020-11-08 22:41:39 +0100150 retry_cnt=-1
BjornMagnussonXAbbd2e9d2020-05-27 21:24:06 +0200151
BjornMagnussonXA49f0e5a2020-11-08 22:41:39 +0100152 if (total_retry_count > 0):
153 print("0 retries:"+str(total_retry_count))
154 else:
155 print("0")
BjornMagnussonXAbbd2e9d2020-05-27 21:24:06 +0200156 sys.exit()
157
158except Exception as e:
159 print("1"+str(e))
BjornMagnussonXA4207b832020-11-03 09:52:49 +0100160 traceback.print_exc()
161 print(str(data_out))
BjornMagnussonXAbbd2e9d2020-05-27 21:24:06 +0200162sys.exit()