feature: sol004 and sol007
[osm/osmclient.git] / osmclient / common / package_handling.py
1 # Copyright ETSI Contributors and Others.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12 # implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15
16 import osmclient.common.utils as utils
17 import os
18
19 SOL004_TOSCA = "SOL004_TOSCA"
20 SOL004 = "SOL004"
21 SOL007_TOSCA = "SOL007_TOSCA"
22 SOL007 = "SOL007"
23 OSM_OLD = "OSM_OLD"
24
25
26 def get_package_type(package_folder):
27 """
28 Detects the package's structure and returns the type:
29 SOL004
30 SOL007
31 OSM_OLD
32 """
33
34 package_files = os.listdir(package_folder)
35 if "Definitions" in package_files and "TOSCA-Metadata" in package_files:
36 descriptors = [
37 definition
38 for definition in os.listdir(package_folder + "/Definitions")
39 if definition.endswith(".yaml") or definition.endswith(".yml")
40 ]
41 if len(descriptors) < 1:
42 raise Exception(
43 "No descriptor found on this package, OSM was expecting at least 1"
44 )
45 pkg_type = utils.get_key_val_from_pkg(descriptors[0])
46 if pkg_type == "nsd":
47 return SOL007_TOSCA
48 else:
49 return SOL004_TOSCA
50 else:
51 manifests = [afile for afile in package_files if afile.endswith(".mf")]
52 if len(manifests) < 1:
53 # No manifest found, probably old OSM package structure
54 return OSM_OLD
55 else:
56 descriptors = [
57 definition
58 for definition in package_files
59 if definition.endswith(".yaml") or definition.endswith(".yml")
60 ]
61 if len(descriptors) < 1:
62 raise Exception(
63 "No descriptor found on this package, OSM was expecting at least 1"
64 )
65 with open(os.path.join(package_folder, descriptors[0])) as descriptor:
66 pkg_type = utils.get_key_val_from_descriptor(descriptor)
67 if pkg_type["type"] == "nsd":
68 return SOL007
69 else:
70 return SOL004