import logging.config
 from onapsdk.configuration import settings
-from onaptests.steps.instantiate.service_ala_carte import YamlTemplateServiceAlaCarteInstantiateStep
+from onaptests.steps.instantiate.vf_module_ala_carte import YamlTemplateVfModuleAlaCarteInstantiateStep
 
 
 
     # Correction requested in onapsdk to avoid having this duplicate code
     logging.config.dictConfig(settings.LOG_CONFIG)
 
-    service_inst = YamlTemplateServiceAlaCarteInstantiateStep()
-    #service_inst = ServiceAlaCarteInstantiateStep()
-    service_inst.execute()
+    basic_vm_instantiate = YamlTemplateVfModuleAlaCarteInstantiateStep()
+    basic_vm_instantiate.execute()
 
 USE_MULTICLOUD = True
 
 VENDOR_NAME = "sdktests_vendor"
-VSP_NAME = "sdktests_vsp"
-VSP_FILE_PATH = "vfw.zip"
-SERVICE_NAME = "sdktests-service"
-VF_NAME = "sdktests_vf"
+SERVICE_NAME = "ubuntu16test" # must be the same as in YAML
 
-CLOUD_REGION_CLOUD_OWNER = "sdktests_cloud_region_owner"
-CLOUD_REGION_ID = "sdktests_cloud_region_id"
+CLOUD_REGION_CLOUD_OWNER = "sdktestsOwner" # must not contain _
+CLOUD_REGION_ID = "RegionOne" # should be valid, as otherwise MultiCloud fails
 CLOUD_REGION_TYPE = "openstack"
 CLOUD_REGION_VERSION = "titanium_cloud"
 CLOUD_DOMAIN = "Default"
 
 GLOBAL_CUSTOMER_ID = "sdktests_global_customer_id"
 TENANT_ID = ""  # Fill me in your custom settings
+TENANT_NAME= "" # Fill me in your custom settings
+AVAILABILITY_ZONE_NAME = "" # Fill me in your custom settings
+AVAILABILITY_ZONE_TYPE = "nova"
 
 VIM_USERNAME = ""  # Fill me in your custom settings
 VIM_PASSWORD = ""  # Fill me in your custom settings
 
+import time
 from uuid import uuid4
 
 from onapsdk.aai.cloud_infrastructure import CloudRegion
         Use settings values:
          - CLOUD_REGION_CLOUD_OWNER,
          - CLOUD_REGION_ID,
-         - CLOUD_REGION_TYPE,
          - CLOUD_DOMAIN,
          - VIM_USERNAME,
          - VIM_PASSWORD,
-         - VIM_SERVICE_URL.
+         - VIM_SERVICE_URL,
+         - TENANT_NAME.
         """
         super().execute()
         cloud_region = CloudRegion.get_by_id(
             esr_system_info_id=str(uuid4()),
             user_name=settings.VIM_USERNAME,
             password=settings.VIM_PASSWORD,
-            system_type=settings.CLOUD_REGION_TYPE,
+            system_type="VIM",
             service_url=settings.VIM_SERVICE_URL,
-            cloud_domain=settings.CLOUD_DOMAIN
+            ssl_insecure=False,
+            system_status="active",
+            cloud_domain=settings.CLOUD_DOMAIN,
+            default_tenant=settings.TENANT_NAME
         )
         cloud_region.register_to_multicloud()
+
+        time.sleep(20)
+        nb_try = 0
+        nb_try_max = 3
+        while nb_try < nb_try_max:
+            if not cloud_region.tenants:
+                time.sleep(20)
+            else:
+                break
+            nb_try += 1
 
         """
         super().__init__(cleanup=cleanup)
         self._yaml_template: dict = None
+        self._service_instance_name: str = None
         self.add_step(YamlTemplateServiceOnboardStep(cleanup))
         self.add_step(ConnectServiceSubToCloudRegionStep(cleanup))
 
 
         """
         if self.is_root:
-            return f"{self.service_name}-{str(uuid4())}"
+            if not self._service_instance_name:
+                self._service_instance_name: str = f"{self.service_name}-{str(uuid4())}"
+            return self._service_instance_name
         return self.parent.service_instance_name
 
     def execute(self):
             cloud_region_id=settings.CLOUD_REGION_ID,
         )
         tenant: Tenant = cloud_region.get_tenant(settings.TENANT_ID)
-        owning_entity = AaiOwningEntity.get_by_owning_entity_name(settings.OWNING_ENTITY)
+        try:
+            owning_entity = AaiOwningEntity.get_by_owning_entity_name(
+                settings.OWNING_ENTITY)
+        except ValueError:
+            self._logger.info("Owning entity not found, create it")
+            owning_entity = AaiOwningEntity.create(settings.OWNING_ENTITY)
         vid_project = Project.create(settings.PROJECT)
-
         service_instantiation = ServiceInstantiation.instantiate_so_ala_carte(
             service,
             cloud_region,
 
         """
         super().__init__(cleanup=cleanup)
         self._yaml_template: dict = None
+        self._service_instance_name: str = None
         self.add_step(YamlTemplateVnfAlaCarteInstantiateStep(cleanup))
 
     @property
 
         """
         if self.is_root:
-            return f"{self.service_name}-{str(uuid4())}"
+            if not self._service_instance_name:
+                self._service_instance_name: str = f"{self.service_name}-{str(uuid4())}"
+            return self._service_instance_name
         return self.parent.service_instance_name
 
     def get_vnf_parameters(self, vnf_name: str) -> Iterable[VnfParameter]:
             Iterator[Iterable[VnfParameter]]: VNF parameter
 
         """
+
+        # workaround, as VNF name differs from model name (added " 0")
+        vnf_name=vnf_name.split()[0]
         for vnf in self.yaml_template[self.service_name]["vnfs"]:
             if vnf["vnf_name"] == vnf_name:
                 for vnf_parameter in vnf["vnf_parameters"]:
         for vnf_instance in service_instance.vnf_instances:
             vf_module_instantiation = vnf_instance.add_vf_module(
                 vnf_instance.vnf.vf_module,
-                vnf_parameters= self.get_vnf_parameters(vnf_instance.vnf.vnf_name))
+                vnf_parameters= self.get_vnf_parameters(vnf_instance.vnf.name))
             while not vf_module_instantiation.finished:
                 time.sleep(10)
             if vf_module_instantiation.failed:
 
         """
         super().__init__(cleanup=cleanup)
         self._yaml_template: dict = None
+        self._service_instance_name: str = None
         self.add_step(YamlTemplateServiceAlaCarteInstantiateStep(cleanup))
 
     @property
 
         """
         if self.is_root:
-            return f"{self.service_name}-{str(uuid4())}"
+            if not self._service_instance_name:
+                self._service_instance_name: str = f"{self.service_name}-{str(uuid4())}"
+            return self._service_instance_name
         return self.parent.service_instance_name
 
     def execute(self):
         service_instance: ServiceInstance = service_subscription.get_service_instance_by_name(self.service_instance_name)
         line_of_business: LineOfBusiness = LineOfBusiness(settings.LINE_OF_BUSINESS)
         platform: Platform = Platform(settings.PLATFORM)
-        for idx, vnf in service.vnfs:
+        for idx, vnf in enumerate(service.vnfs):
             vnf_instantiation = service_instance.add_vnf(vnf, line_of_business, platform, f"{self.service_instance_name}_vnf_{idx}")
             while not vnf_instantiation.finished:
                 time.sleep(10)
 
 class YamlTemplateVspOnboardStep(YamlTemplateBaseStep):
     """Vsp onboard using YAML template step."""
 
+    def __init__(self, cleanup=False):
+        """Initialize step.
+
+        Substeps:
+            - VendorOnboardStep.
+        """
+        super().__init__(cleanup=cleanup)
+        self.add_step(VendorOnboardStep(cleanup=cleanup))
+
     @property
     def yaml_template(self) -> dict:
         """YAML template.