| Mike Marchetti | e84eb31 | 2017-05-04 15:06:26 -0400 | [diff] [blame] | 1 | # Copyright 2017 Sandvine |
| 2 | # |
| 3 | # All Rights Reserved. |
| 4 | # |
| 5 | # Licensed under the Apache License, Version 2.0 (the "License"); you may |
| 6 | # not use this file except in compliance with the License. You may obtain |
| 7 | # a copy of the License at |
| 8 | # |
| 9 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 10 | # |
| 11 | # Unless required by applicable law or agreed to in writing, software |
| 12 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| 13 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| 14 | # License for the specific language governing permissions and limitations |
| 15 | # under the License. |
| 16 | |
| 17 | import time |
| garciadeblas | 017c4fb | 2018-02-13 11:58:29 +0100 | [diff] [blame] | 18 | from uuid import UUID |
| 19 | import hashlib |
| 20 | import tarfile |
| 21 | import re |
| 22 | import yaml |
| Mike Marchetti | e84eb31 | 2017-05-04 15:06:26 -0400 | [diff] [blame] | 23 | |
| Eduardo Sousa | a63fb3c | 2019-03-31 23:49:14 +0100 | [diff] [blame] | 24 | |
| Mike Marchetti | 4c7e237 | 2017-05-08 16:07:20 -0400 | [diff] [blame] | 25 | def wait_for_value(func, result=True, wait_time=10, catch_exception=None): |
| Mike Marchetti | e84eb31 | 2017-05-04 15:06:26 -0400 | [diff] [blame] | 26 | maxtime = time.time() + wait_time |
| 27 | while time.time() < maxtime: |
| 28 | try: |
| 29 | if func() == result: |
| Mike Marchetti | 4c7e237 | 2017-05-08 16:07:20 -0400 | [diff] [blame] | 30 | return True |
| 31 | except catch_exception: |
| Mike Marchetti | e84eb31 | 2017-05-04 15:06:26 -0400 | [diff] [blame] | 32 | pass |
| garciadeblas | d6eb17b | 2019-06-06 17:55:09 +0200 | [diff] [blame] | 33 | time.sleep(5) |
| Mike Marchetti | e84eb31 | 2017-05-04 15:06:26 -0400 | [diff] [blame] | 34 | try: |
| 35 | return func() == result |
| Mike Marchetti | 4c7e237 | 2017-05-08 16:07:20 -0400 | [diff] [blame] | 36 | except catch_exception: |
| Mike Marchetti | e84eb31 | 2017-05-04 15:06:26 -0400 | [diff] [blame] | 37 | return False |
| garciadeblas | 017c4fb | 2018-02-13 11:58:29 +0100 | [diff] [blame] | 38 | |
| 39 | |
| 40 | def validate_uuid4(uuid_text): |
| 41 | try: |
| 42 | UUID(uuid_text) |
| 43 | return True |
| 44 | except (ValueError, TypeError): |
| 45 | return False |
| 46 | |
| 47 | |
| 48 | def md5(fname): |
| 49 | hash_md5 = hashlib.md5() |
| 50 | with open(fname, "rb") as f: |
| 51 | for chunk in iter(lambda: f.read(4096), b""): |
| 52 | hash_md5.update(chunk) |
| 53 | return hash_md5.hexdigest() |
| 54 | |
| 55 | |
| 56 | def get_key_val_from_pkg(descriptor_file): |
| Eduardo Sousa | a63fb3c | 2019-03-31 23:49:14 +0100 | [diff] [blame] | 57 | # method opens up a package and finds the name of the resulting |
| 58 | # descriptor (vnfd or nsd name) |
| garciadeblas | 017c4fb | 2018-02-13 11:58:29 +0100 | [diff] [blame] | 59 | tar = tarfile.open(descriptor_file) |
| 60 | yamlfile = None |
| 61 | for member in tar.getmembers(): |
| 62 | if (re.match('.*.yaml', member.name) and |
| Eduardo Sousa | a63fb3c | 2019-03-31 23:49:14 +0100 | [diff] [blame] | 63 | len(member.name.split('/')) == 2): |
| garciadeblas | 017c4fb | 2018-02-13 11:58:29 +0100 | [diff] [blame] | 64 | yamlfile = member.name |
| 65 | break |
| 66 | if yamlfile is None: |
| 67 | return None |
| 68 | |
| garciadeblas | dd006fa | 2019-11-07 09:30:30 +0100 | [diff] [blame] | 69 | dict = yaml.safe_load(tar.extractfile(yamlfile)) |
| garciadeblas | 017c4fb | 2018-02-13 11:58:29 +0100 | [diff] [blame] | 70 | result = {} |
| peusterm | be96096 | 2018-06-14 21:32:55 +0200 | [diff] [blame] | 71 | for k1, v1 in list(dict.items()): |
| garciadeblas | 017c4fb | 2018-02-13 11:58:29 +0100 | [diff] [blame] | 72 | if not k1.endswith('-catalog'): |
| 73 | continue |
| peusterm | be96096 | 2018-06-14 21:32:55 +0200 | [diff] [blame] | 74 | for k2, v2 in list(v1.items()): |
| garciadeblas | 017c4fb | 2018-02-13 11:58:29 +0100 | [diff] [blame] | 75 | if not k2.endswith('nsd') and not k2.endswith('vnfd'): |
| 76 | continue |
| 77 | |
| 78 | if 'nsd' in k2: |
| 79 | result['type'] = 'nsd' |
| 80 | else: |
| 81 | result['type'] = 'vnfd' |
| 82 | |
| 83 | for entry in v2: |
| peusterm | be96096 | 2018-06-14 21:32:55 +0200 | [diff] [blame] | 84 | for k3, v3 in list(entry.items()): |
| garciadeblas | 017c4fb | 2018-02-13 11:58:29 +0100 | [diff] [blame] | 85 | # strip off preceeding chars before : |
| 86 | key_name = k3.split(':').pop() |
| 87 | |
| 88 | result[key_name] = v3 |
| 89 | tar.close() |
| 90 | return result |