'GENERIC': ["2020-08-13"]}
 LOCATION_KEYS = ['latitude', 'longitude', 'host_name', 'clli_code']
 INVENTORY_PROVIDERS = ['aai', 'generator', 'sdc']
-INVENTORY_TYPES = ['cloud', 'service', 'transport', 'vfmodule', 'nssi', 'nsi', 'slice_profiles', 'nst']
+INVENTORY_TYPES = ['cloud', 'service', 'transport', 'vfmodule', 'nssi', 'nsi', 'slice_profiles', 'nst', 'nsst']
 DEFAULT_INVENTORY_PROVIDER = INVENTORY_PROVIDERS[0]
 CANDIDATE_KEYS = ['candidate_id', 'cost', 'inventory_type', 'location_id',
                   'location_type']
 
 from oslo_config import cfg
 from oslo_log import log
 
-
 from conductor.common import rest
 from conductor.data.plugins import constants
 from conductor.data.plugins.inventory_provider import base
             if match_type == 'any':
                 if attribute_key not in inventory_attributes or \
                         (len(attribute_values) > 0 and inventory_attributes[attribute_key] and
-                            inventory_attributes[attribute_key] not in attribute_values):
+                         inventory_attributes[attribute_key] not in attribute_values):
                     return False
             elif match_type == 'not':
                 # drop the candidate when
                                                                       inventory_type)
                         resolved_demands[name].extend(SDC().update_candidates(sdc_candidates_list))
 
+                elif inventory_type == 'nsst':
+                    if filtering_attributes:
+                        second_level_match = aai_utils.get_first_level_and_second_level_filter(filtering_attributes,
+                                                                                               "Nsst")
+                        aai_response = self.get_nsst_response(filtering_attributes)
+
+                        sdc_candidates_list = self.get_nsst_candidates(aai_response, second_level_match,
+                                                                       default_attributes, candidate_uniqueness,
+                                                                       inventory_type)
+                        resolved_demands[name].extend(SDC().update_candidates_nsst(sdc_candidates_list))
+
                 else:
                     LOG.error("Unknown inventory_type "
                               " {}".format(inventory_type))
         if aai_response.json():
             return aai_response.json()
 
+    def get_nsst_response(self, filtering_attributes):
+        raw_path = 'service-design-and-creation/models' + aai_utils.add_query_params_and_depth(filtering_attributes,
+                                                                                               "2")
+        path = self._aai_versioned_path(raw_path)
+        aai_response = self._request('get', path, data=None)
+
+        if aai_response is None or aai_response.status_code != 200:
+            return None
+        if aai_response.json():
+            return aai_response.json()
+
     def get_nst_candidates(self, response_body, filtering_attributes, default_attributes, candidate_uniqueness,
                            type):
         candidates = list()
                                         profile_info=None)
                     candidates.append(nst_candidate)
         return candidates
+
+    def get_nsst_candidates(self, response_body, filtering_attributes, default_attributes, candidate_uniqueness,
+                            type):
+        candidates = list()
+        if response_body is not None:
+            nsst_metadatas = response_body.get("model", [])
+
+            for nsst_metadata in nsst_metadatas:
+                nsst_info = aai_utils.get_nsst_info(nsst_metadata)
+                model_vers = nsst_metadata.get('model-vers').get('model-ver')
+                for model_ver in model_vers:
+                    model_version_id = model_ver.get('model-version-id')
+                    cost = self.conf.data.nsst_candidate_cost
+                    info = Candidate.build_candidate_info('aai', type, cost, candidate_uniqueness, model_version_id)
+                    model_version_obj = aai_utils.get_model_ver_info(model_ver)
+                    model_ver_info = aai_utils.convert_hyphen_to_under_score(model_version_obj)
+                    nst_candidate = NST(model_info=nsst_info, model_ver=model_ver_info, info=info,
+                                        default_fields=aai_utils.convert_hyphen_to_under_score(default_attributes),
+                                        profile_info=None)
+                    candidates.append(nst_candidate)
+        return candidates
 
--- /dev/null
+#
+# -------------------------------------------------------------------------
+#   Copyright (C) 2020 Wipro Limited.
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+# -------------------------------------------------------------------------
+#
+
+from conductor.data.plugins.inventory_provider.candidates.candidate import Candidate
+
+
+class NSST(Candidate):
+    def __init__(self, **kwargs):
+        super().__init__(kwargs['info'])
+        self.nsst_info = kwargs['model_info']
+        self.model_ver_info = kwargs['model_ver']
+        self.profile_info = kwargs['profile_info']
+        self.other = kwargs['default_fields']
 
             candidateslist.append(finalcandidate)
         return candidateslist
 
+    def update_candidates_nsst(self, candidates):
+        absfilepath = self.conf.sdc.temp_path
+        candidateslist = []
+        for candidate in candidates:
+            model_ver_obj = candidate.model_ver_info
+            model_name = model_ver_obj['model_name']
+            self.model_version_id = candidate.candidate_id
+            response = self.get_nsst_template(self.model_version_id)
+            filepath = os.path.join(absfilepath, "{}.csar".format(self.model_version_id))
+            if not os.path.exists(absfilepath):
+                os.makedirs(absfilepath)
+            f = open(filepath, "wb")
+            file_res = response.content
+            f.write(file_res)
+            obj = csar.SDCCSAR(filepath, model_name)
+            nsst_temp_prop = obj.validate()
+            nsst_properties = self.get_nsst_prop_dict(nsst_temp_prop)
+            candidate.profile_info = nsst_properties
+            finalcandidate = candidate.convert_nested_dict_to_dict()
+            candidateslist.append(finalcandidate)
+        return candidateslist
+
     def get_nst_prop_dict(self, nst_properties):
         properties_dict = dict()
         for key in list(nst_properties):
                     properties_dict[key] = temp_dict[temp_key]
         return properties_dict
 
+    def get_nsst_prop_dict(self, nsst_properties):
+        properties_dict = dict()
+        for key in list(nsst_properties):
+            temp_dict = nsst_properties[key]
+            for temp_key in list(temp_dict):
+                if "default" in temp_key:
+                    properties_dict[key] = temp_dict[temp_key]
+        return properties_dict
+
     def get_nst_template(self, ver_id):
         raw_path = "/catalog/services/{}/toscaModel".format(ver_id)
         path = self._sdc_versioned_path(raw_path)
             return None
         if sdc_response:
             return sdc_response
+
+    def get_nsst_template(self, ver_id):
+        raw_path = "/catalog/services/{}/toscaModel".format(ver_id)
+        path = self._sdc_versioned_path(raw_path)
+        sdc_response = self._request('get', path, data=None)
+        if sdc_response is None or sdc_response.status_code != 200:
+            return None
+        if sdc_response:
+            return sdc_response
 
 QUERY_PARAMS = {'service_instance': ["service-instance-id", "service-instance-name", "environment-context",
                                      "workload-context", "model-invariant-id", "model-version-id", "widget-model-id",
                                      "widget-model-version", "service-instance-location-id", "orchestration-status"],
-                'nst': ["model-role"]
+                'nst': ["model-role"], 'Nsst': ["model-role"]
                 }
 
 
     return nst_dict
 
 
+def get_nsst_info(nsst_instance):
+    nsst_dict = {}
+    nsst_dict['model_invariant_id'] = nsst_instance.get('model-invariant-id')
+    nsst_dict['model_type'] = nsst_instance.get('model-type')
+    nsst_dict['model_role'] = nsst_instance.get('model-role')
+    return nsst_dict
+
+
 def get_model_ver_info(model_version):
     for key in list(model_version):
         if "model-elements" in key:
 
-
-
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain
 #    a copy of the License at
 from toscaparser.utils import yamlparser
 import zipfile
 
-
 try:  # Python 2.x
     from BytesIO import BytesIO
 except ImportError:  # Python 3.x
             print("nst properties", nst_properies_res)
         return nst_properies_res
 
+        if is_validated:
+            main_tpl = self._read_template_yaml(self.main_template_file_name)
+            nsst_properies_res = self.get_nsst_properties(main_tpl)
+            print("nsst properties", nsst_properies_res)
+        return nsst_properies_res
+
     def get_nst_properties(self, main_tpl):
         importsarr = main_tpl.get('imports')
         for imports in importsarr:
                 nodedata = node_types[key]
         nst_properties = nodedata.get("properties")
         return nst_properties
+
+    def get_nsst_properties(self, main_tpl):
+        importsarr = main_tpl.get('imports')
+        for imports in importsarr:
+            for key in imports:
+                if "service-{}-interface".format(self.model_name) in key:
+                    val = imports[key]
+        filename = val.get("file")
+        datanew = self._read_template_yaml("Definitions/" + filename)
+        node_types = datanew.get("node_types")
+        for key in list(node_types):
+            if "org.openecomp" in key:
+                nodedata = node_types[key]
+        nsst_properties = nodedata.get("properties")
+        return nsst_properties
 
                  default=1.0),
     cfg.FloatOpt('nst_candidate_cost',
                  default=1.0),
+    cfg.FloatOpt('nsst_candidate_cost',
+                 default=1.0),
 ]
 
 CONF.register_opts(DATA_OPTS, group='data')
 
                                 'aic_version': resource.get("cloud_region_version")},
                         }
 
-                        if rec["candidate"]["inventory_type"] in ["nssi", "nsi", "slice_profiles", "nst"]:
+                        if rec["candidate"]["inventory_type"] in ["nssi", "nsi", "slice_profiles", "nst", "nsst"]:
                             rec["candidate"] = resource
 
                         if resource.get('vim-id'):