exc = None
try:
step = "Getting vim from db"
- db_vim = self.db.get_one("vims", {"_id": vim_id})
+ db_vim = self.db.get_one("vim_accounts", {"_id": vim_id})
if "_admin" not in db_vim:
db_vim["_admin"] = {}
if "deployed" not in db_vim["_admin"]:
desc = await RO.create("vim", descriptor=vim_RO)
RO_vim_id = desc["uuid"]
db_vim["_admin"]["deployed"]["RO"] = RO_vim_id
- self.update_db("vims", vim_id, db_vim)
+ self.update_db("vim_accounts", vim_id, db_vim)
step = "Attach vim to RO tenant"
vim_RO = {"vim_tenant_name": vim_content["vim_tenant_name"],
}
desc = await RO.attach_datacenter(RO_vim_id , descriptor=vim_RO)
db_vim["_admin"]["operationalState"] = "ENABLED"
- self.update_db("vims", vim_id, db_vim)
+ self.update_db("vim_accounts", vim_id, db_vim)
self.logger.debug(logging_text + "Exit Ok RO_vim_id".format(RO_vim_id))
return RO_vim_id
if exc and db_vim:
db_vim["_admin"]["operationalState"] = "ERROR"
db_vim["_admin"]["detailed-status"] = "ERROR {}: {}".format(step , exc)
- self.update_db("vims", vim_id, db_vim)
+ self.update_db("vim_accounts", vim_id, db_vim)
async def vim_edit(self, vim_content, order_id):
vim_id = vim_content["_id"]
exc = None
step = "Getting vim from db"
try:
- db_vim = self.db.get_one("vims", {"_id": vim_id})
+ db_vim = self.db.get_one("vim_accounts", {"_id": vim_id})
if db_vim.get("_admin") and db_vim["_admin"].get("deployed") and db_vim["_admin"]["deployed"].get("RO"):
RO_vim_id = db_vim["_admin"]["deployed"]["RO"]
step = "Editing vim at RO"
if vim_RO:
desc = await RO.edit("vim_account", RO_vim_id, descriptor=vim_RO)
db_vim["_admin"]["operationalState"] = "ENABLED"
- self.update_db("vims", vim_id, db_vim)
+ self.update_db("vim_accounts", vim_id, db_vim)
self.logger.debug(logging_text + "Exit Ok RO_vim_id".format(RO_vim_id))
return RO_vim_id
if exc and db_vim:
db_vim["_admin"]["operationalState"] = "ERROR"
db_vim["_admin"]["detailed-status"] = "ERROR {}: {}".format(step , exc)
- self.update_db("vims", vim_id, db_vim)
+ self.update_db("vim_accounts", vim_id, db_vim)
async def vim_delete(self, vim_id, order_id):
logging_text = "Task vim_delete={} ".format(vim_id)
exc = None
step = "Getting vim from db"
try:
- db_vim = self.db.get_one("vims", {"_id": vim_id})
+ db_vim = self.db.get_one("vim_accounts", {"_id": vim_id})
if db_vim.get("_admin") and db_vim["_admin"].get("deployed") and db_vim["_admin"]["deployed"].get("RO"):
RO_vim_id = db_vim["_admin"]["deployed"]["RO"]
RO = ROclient.ROClient(self.loop, **self.ro_config)
else:
# nothing to delete
self.logger.error(logging_text + "Skipping. There is not RO information at database")
- self.db.del_one("vims", {"_id": vim_id})
+ self.db.del_one("vim_accounts", {"_id": vim_id})
self.logger.debug("vim_delete task vim_id={} Exit Ok".format(vim_id))
return None
if exc and db_vim:
db_vim["_admin"]["operationalState"] = "ERROR"
db_vim["_admin"]["detailed-status"] = "ERROR {}: {}".format(step , exc)
- self.update_db("vims", vim_id, db_vim)
+ self.update_db("vim_accounts", vim_id, db_vim)
async def sdn_create(self, sdn_content, order_id):
sdn_id = sdn_content["_id"]
self.logger.critical("[n2vc_callback] vnf_index={} Update database Exception {}".format(
vnf_member_index, e), exc_info=True)
+ def ns_params_2_RO(self, ns_params):
+ """
+ Creates a RO ns descriptor from OSM ns_instantite params
+ :param ns_params: OSM instantiate params
+ :return: The RO ns descriptor
+ """
+ vim_2_RO = {}
+ def vim_account_2_RO(vim_account):
+ if vim_account in vim_2_RO:
+ return vim_2_RO[vim_account]
+ db_vim = self.db.get_one("vim_accounts", {"_id": vim_account})
+ # if db_vim["_admin"]["operationalState"] == "PROCESSING":
+ # #TODO check if VIM is creating and wait
+ if db_vim["_admin"]["operationalState"] != "ENABLED":
+ raise LcmException("VIM={} is not available. operationalSstatus={}".format(
+ vim_account, db_vim["_admin"]["operationalState"]))
+ RO_vim_id = db_vim["_admin"]["deployed"]["RO"]
+ vim_2_RO[vim_account] = RO_vim_id
+ return RO_vim_id
+
+ if not ns_params:
+ return None
+ RO_ns_params = {
+ # "name": ns_params["nsName"],
+ # "description": ns_params.get("nsDescription"),
+ "datacenter": vim_account_2_RO(ns_params["vimAccountId"]),
+ # "scenario": ns_params["nsdId"],
+ "vnfs": {},
+ "networks": {},
+ }
+ if ns_params.get("ssh-authorized-key"):
+ RO_ns_params["cloud-config"] = {"key-pairs": ns_params["ssh-authorized-key"]}
+ if ns_params.get("vnf"):
+ for vnf in ns_params["vnf"]:
+ RO_vnf = {}
+ if "vimAccountId" in vnf:
+ RO_vnf["datacenter"] = vim_account_2_RO(vnf["vimAccountId"])
+ if RO_vnf:
+ RO_ns_params["vnfs"][vnf["member-vnf-index"]] = RO_vnf
+ if ns_params.get("vld"):
+ for vld in ns_params["vld"]:
+ RO_vld = {}
+ if "ip-profile" in vld:
+ RO_vld["ip-profile"] = vld["ip-profile"]
+ if "vim-network-name" in vld:
+ RO_vld["sites"] = []
+ if isinstance(vld["vim-network-name"], dict):
+ for vim_account, vim_net in vld["vim-network-name"].items():
+ RO_vld["sites"].append({
+ "netmap-use": vim_net,
+ "datacenter": vim_account_2_RO(vim_account)
+ })
+ else: #isinstance str
+ RO_vld["sites"].append({"netmap-use": vld["vim-network-name"]})
+ if RO_vld:
+ RO_ns_params["networks"][vld["name"]] = RO_vld
+ return RO_ns_params
+
async def ns_instantiate(self, nsr_id, nslcmop_id):
logging_text = "Task ns={} instantiate={} ".format(nsr_id, nslcmop_id)
self.logger.debug(logging_text + "Enter")
nsd = db_nsr["nsd"]
nsr_name = db_nsr["name"] # TODO short-name??
- db_vim = self.db.get_one("vims", {"_id": db_nsr["datacenter"]})
- # if db_vim["_admin"]["operationalState"] == "PROCESSING":
- # #TODO check if VIM is creating and wait
- if db_vim["_admin"]["operationalState"] != "ENABLED":
- raise LcmException("VIM={} is not available. operationalSstatus={}".format(
- db_nsr["datacenter"], db_vim["_admin"]["operationalState"]))
- RO_vim_id = db_vim["_admin"]["deployed"]["RO"]
-
needed_vnfd = {}
for c_vnf in nsd["constituent-vnfd"]:
vnfd_id = c_vnf["vnfd-id-ref"]
db_nsr["detailed-status"] = "creating"
db_nsr["operational-status"] = "init"
- deloyment_timeout = 120
-
- RO = ROclient.ROClient(self.loop, datacenter=RO_vim_id, **self.ro_config)
+ RO = ROclient.ROClient(self.loop, **self.ro_config)
# get vnfds, instantiate at RO
for vnfd_id, vnfd in needed_vnfd.items():
if not RO_nsr_id:
step = db_nsr["detailed-status"] = "Creating ns at RO"
self.logger.debug(logging_text + step)
-
- desc = await RO.create("ns", name=db_nsr["name"], datacenter=RO_vim_id,
+ RO_ns_params = self.ns_params_2_RO(db_nsr.get("instantiate_params"))
+ desc = await RO.create("ns", descriptor=RO_ns_params,
+ name=db_nsr["name"],
scenario=nsr_lcm["RO"]["nsd_id"])
RO_nsr_id = nsr_lcm["RO"]["nsr_id"] = desc["uuid"]
db_nsr["_admin"]["nsState"] = "INSTANTIATED"
step = ns_status_detailed = "Waiting ns ready at RO"
db_nsr["detailed-status"] = ns_status_detailed
self.logger.debug(logging_text + step + " RO_ns_id={}".format(RO_nsr_id))
- deloyment_timeout = 600
- while deloyment_timeout > 0:
+ deployment_timeout = 2*3600 # Two hours
+ while deployment_timeout > 0:
desc = await RO.show("ns", RO_nsr_id)
ns_status, ns_status_info = RO.check_ns_status(desc)
nsr_lcm["RO"]["nsr_status"] = ns_status
db_nsr["detailed-status"] = ns_status_detailed + "; {}".format(ns_status_info)
self.update_db("nsrs", nsr_id, db_nsr)
elif ns_status == "ACTIVE":
+ step = "Getting ns VNF management IP address"
nsr_lcm["nsr_ip"] = RO.get_ns_vnf_ip(desc)
break
else:
assert False, "ROclient.check_ns_status returns unknown {}".format(ns_status)
await asyncio.sleep(5, loop=self.loop)
- deloyment_timeout -= 5
- if deloyment_timeout <= 0:
+ deployment_timeout -= 5
+ if deployment_timeout <= 0:
raise ROclient.ROClientException("Timeout waiting ns to be ready")
db_nsr["detailed-status"] = "Configuring vnfr"
self.update_db("nsrs", nsr_id, db_nsr)
if db_nsr["_admin"]["nsState"] == "NOT_INSTANTIATED":
return
# TODO ALF remove
- # db_vim = self.db.get_one("vims", {"_id": db_nsr["datacenter"]})
+ # db_vim = self.db.get_one("vim_accounts", {"_id": db_nsr["datacenter"]})
# #TODO check if VIM is creating and wait
# RO_vim_id = db_vim["_admin"]["deployed"]["RO"]