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 |
1 |
"""Python module for interacting with ETSI GS NFV-SOL007 compliant packages. |
17 |
|
|
18 |
|
This module provides a SOL007Package class for validating and interacting with |
19 |
|
ETSI SOL007 packages. A valid SOL007 package may have its files arranged according |
20 |
|
to one of the following two structures: |
21 |
|
|
22 |
|
SOL007 with metadata directory SOL007 without metadata directory |
23 |
|
|
24 |
|
native_charm_vnf/ native_charm_vnf/ |
25 |
|
├── TOSCA-Metadata ├── native_charm_nsd.mf |
26 |
|
│ └── TOSCA.meta ├── native_charm_nsd.yaml |
27 |
|
├── manifest.mf ├── ChangeLog.txt |
28 |
|
├── Definitions ├── Licenses |
29 |
|
│ └── native_charm_nsd.yaml │ └── license.lic |
30 |
|
├── Files ├── Files |
31 |
|
│ ├── icons │ └── icons |
32 |
|
│ │ └── osm.png │ └── osm.png |
33 |
|
│ ├── Licenses └── Scripts |
34 |
|
│ │ └── license.lic ├── cloud_init |
35 |
|
│ └── changelog.txt │ └── cloud-config.txt |
36 |
|
└── Scripts └── charms |
37 |
|
├── cloud_init └── simple |
38 |
|
│ └── cloud-config.txt ├── config.yaml |
39 |
|
└── charms ├── hooks |
40 |
|
└── simple │ ├── install |
41 |
|
├── config.yaml ... |
42 |
|
├── hooks │ |
43 |
|
│ ├── install └── src |
44 |
|
... └── charm.py |
45 |
|
└── src |
46 |
|
└── charm.py |
47 |
|
""" |
48 |
|
|
49 |
1 |
import yaml |
50 |
1 |
import datetime |
51 |
1 |
import os |
52 |
1 |
from .sol_package import SOLPackage |
53 |
|
|
54 |
|
|
55 |
1 |
class SOL007PackageException(Exception): |
56 |
1 |
pass |
57 |
|
|
58 |
|
|
59 |
1 |
class SOL007Package(SOLPackage): |
60 |
1 |
_MANIFEST_NSD_INVARIANT_ID = "nsd_invariant_id" |
61 |
1 |
_MANIFEST_NSD_NAME = "nsd_name" |
62 |
1 |
_MANIFEST_NSD_DESIGNER = "nsd_designer" |
63 |
1 |
_MANIFEST_NSD_FILE_STRUCTURE_VERSION = "nsd_file_structure_version" |
64 |
1 |
_MANIFEST_NSD_RELEASE_DATE_TIME = "nsd_release_date_time" |
65 |
1 |
_MANIFEST_NSD_COMPATIBLE_SPECIFICATION_VERSIONS = ( |
66 |
|
"compatible_specification_versions" |
67 |
|
) |
68 |
|
|
69 |
1 |
_MANIFEST_ALL_FIELDS = [ |
70 |
|
_MANIFEST_NSD_INVARIANT_ID, |
71 |
|
_MANIFEST_NSD_NAME, |
72 |
|
_MANIFEST_NSD_DESIGNER, |
73 |
|
_MANIFEST_NSD_FILE_STRUCTURE_VERSION, |
74 |
|
_MANIFEST_NSD_RELEASE_DATE_TIME, |
75 |
|
_MANIFEST_NSD_COMPATIBLE_SPECIFICATION_VERSIONS, |
76 |
|
] |
77 |
|
|
78 |
1 |
def __init__(self, package_path=""): |
79 |
0 |
super().__init__(package_path) |
80 |
|
|
81 |
1 |
def generate_manifest_data_from_descriptor(self): |
82 |
0 |
descriptor_path = os.path.join( |
83 |
|
self._package_path, self.get_descriptor_location() |
84 |
|
) |
85 |
0 |
with open(descriptor_path, "r") as descriptor: |
86 |
0 |
try: |
87 |
0 |
nsd_data = yaml.safe_load(descriptor)["nsd"] |
88 |
0 |
except yaml.YAMLError as e: |
89 |
0 |
print("Error reading descriptor {}: {}".format(descriptor_path, e)) |
90 |
0 |
return |
91 |
|
|
92 |
0 |
self._manifest_metadata = {} |
93 |
0 |
self._manifest_metadata[self._MANIFEST_NSD_INVARIANT_ID] = nsd_data.get( |
94 |
|
"id", "default-id" |
95 |
|
) |
96 |
0 |
self._manifest_metadata[self._MANIFEST_NSD_NAME] = nsd_data.get( |
97 |
|
"name", "default-name" |
98 |
|
) |
99 |
0 |
self._manifest_metadata[self._MANIFEST_NSD_DESIGNER] = nsd_data.get( |
100 |
|
"designer", "OSM" |
101 |
|
) |
102 |
0 |
self._manifest_metadata[ |
103 |
|
self._MANIFEST_NSD_FILE_STRUCTURE_VERSION |
104 |
|
] = nsd_data.get("version", "1.0") |
105 |
0 |
self._manifest_metadata[self._MANIFEST_NSD_RELEASE_DATE_TIME] = ( |
106 |
|
datetime.datetime.now().astimezone().isoformat() |
107 |
|
) |
108 |
0 |
self._manifest_metadata[ |
109 |
|
self._MANIFEST_NSD_COMPATIBLE_SPECIFICATION_VERSIONS |
110 |
|
] = "2.7.1" |