3 # jose.lausuch@ericsson.com
4 # valentin.boucher@orange.com
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
25 # ----------------------------------------------------------
29 # -----------------------------------------------------------
30 def check_internet_connectivity(url='http://www.opnfv.org/'):
32 Check if there is access to the internet
35 urllib2.urlopen(url, timeout=5)
37 except urllib2.URLError:
41 def download_url(url, dest_path):
43 Download a file to a destination path given a URL
45 name = url.rsplit('/')[-1]
46 dest = dest_path + "/" + name
48 response = urllib2.urlopen(url)
49 except (urllib2.HTTPError, urllib2.URLError):
52 with open(dest, 'wb') as f:
53 shutil.copyfileobj(response, f)
57 # ----------------------------------------------------------
61 # -----------------------------------------------------------
62 def get_git_branch(repo_path):
66 repo = Repo(repo_path)
67 branch = repo.active_branch
71 def get_installer_type(logger=None):
73 Get installer type (fuel, apex, joid, compass)
76 installer = os.environ['INSTALLER_TYPE']
79 logger.error("Impossible to retrieve the installer type")
80 installer = "Unknown_installer"
85 def get_scenario(logger=None):
90 scenario = os.environ['DEPLOY_SCENARIO']
93 logger.error("Impossible to retrieve the scenario")
94 scenario = "Unknown_scenario"
99 def get_version(logger=None):
103 # Use the build tag to retrieve the version
104 # By default version is unknown
105 # if launched through CI the build tag has the following format
106 # jenkins-<project>-<installer>-<pod>-<job>-<branch>-<id>
107 # e.g. jenkins-functest-fuel-opnfv-jump-2-daily-master-190
108 # use regex to match branch info
109 rule = "daily-(.+?)-[0-9]*"
110 build_tag = get_build_tag(logger)
111 m = re.search(rule, build_tag)
118 def get_pod_name(logger=None):
120 Get PoD Name from env variable NODE_NAME
123 return os.environ['NODE_NAME']
127 "Unable to retrieve the POD name from environment. " +
128 "Using pod name 'unknown-pod'")
132 def get_build_tag(logger=None):
134 Get build tag of jenkins jobs
137 build_tag = os.environ['BUILD_TAG']
140 logger.error("Impossible to retrieve the build tag")
141 build_tag = "unknown_build_tag"
146 def push_results_to_db(db_url, project, case_name, logger, pod_name,
147 version, scenario, criteria, build_tag, payload):
149 POST results to the Result target DB
151 url = db_url + "/results"
152 installer = get_installer_type(logger)
153 params = {"project_name": project, "case_name": case_name,
154 "pod_name": pod_name, "installer": installer,
155 "version": version, "scenario": scenario, "criteria": criteria,
156 "build_tag": build_tag, "details": payload}
158 headers = {'Content-Type': 'application/json'}
160 r = requests.post(url, data=json.dumps(params), headers=headers)
165 print ("Error [push_results_to_db('%s', '%s', '%s', " +
166 "'%s', '%s', '%s', '%s', '%s', '%s')]:" %
167 (db_url, project, case_name, pod_name, version,
168 scenario, criteria, build_tag, payload), e)
172 def get_resolvconf_ns():
174 Get nameservers from current resolv.conf
177 rconf = open("/etc/resolv.conf", "r")
178 line = rconf.readline()
180 ip = re.search(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b", line)
181 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
183 result = sock.connect_ex((ip.group(), 53))
185 nameservers.append(ip.group())
186 line = rconf.readline()
190 def get_ci_envvars():
192 Get the CI env variables
195 "installer": os.environ.get('INSTALLER_TYPE'),
196 "scenario": os.environ.get('DEPLOY_SCENARIO')}
200 def execute_command(cmd, logger=None,
206 error_msg = ("The command '%s' failed." % cmd)
207 msg_exec = ("Executing command: '%s'" % cmd)
211 logger.info(msg_exec)
213 logger.debug(msg_exec)
216 p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
218 line = p.stdout.readline().replace('\n', '')
229 if p.returncode != 0:
232 logger.error(error_msg)
241 def get_deployment_dir(logger=None):
243 Returns current Rally deployment directory
245 with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f:
246 functest_yaml = yaml.safe_load(f)
248 deployment_name = functest_yaml.get("rally").get("deployment_name")
249 rally_dir = functest_yaml.get("general").get("directories").get(
251 cmd = ("rally deployment list | awk '/" + deployment_name +
253 p = subprocess.Popen(cmd, shell=True,
254 stdout=subprocess.PIPE,
255 stderr=subprocess.STDOUT)
256 deployment_uuid = p.stdout.readline().rstrip()
257 if deployment_uuid == "":
259 logger.error("Rally deployment not found.")
261 deployment_dir = (rally_dir + "/tempest/for-deployment-" +
263 return deployment_dir