Skip to content
Snippets Groups Projects
Commit f6fe2ee8 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Slice component:

- Corrected logic of Slice to take into account Context-generated UUIDs
parent 41befba7
No related branches found
No related tags found
2 merge requests!54Release 2.0.0,!43CI pipeline and multiple module fixes
......@@ -12,12 +12,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import Optional
import grpc, json, logging #, deepdiff
from common.proto.context_pb2 import (
Empty, Service, ServiceId, ServiceStatusEnum, ServiceTypeEnum, Slice, SliceId, SliceStatusEnum)
from common.proto.slice_pb2_grpc import SliceServiceServicer
from common.method_wrappers.Decorator import MetricsPool, safe_and_metered_rpc_method
from common.tools.context_queries.InterDomain import is_multi_domain
from common.tools.context_queries.Slice import get_slice
from common.tools.grpc.ConfigRules import copy_config_rules
from common.tools.grpc.Constraints import copy_constraints
from common.tools.grpc.EndPointIds import copy_endpoint_ids
......@@ -37,29 +39,32 @@ class SliceServiceServicerImpl(SliceServiceServicer):
LOGGER.debug('Servicer Created')
def create_update(self, request : Slice) -> SliceId:
# Set slice status to "SERVICESTATUS_PLANNED" to ensure rest of components are aware the slice is
# being modified.
context_client = ContextClient()
try:
_slice = context_client.GetSlice(request.slice_id)
#json_current_slice = grpc_message_to_json(_slice)
except: # pylint: disable=bare-except
#json_current_slice = {}
slice_request = Slice()
slice_request.slice_id.CopyFrom(request.slice_id) # pylint: disable=no-member
slice_request.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_PLANNED # pylint: disable=no-member
context_client.SetSlice(slice_request)
_slice = context_client.GetSlice(request.slice_id)
slice_ro : Optional[Service] = get_slice(
context_client, request.slice_id.slice_uuid.uuid, request.slice_id.context_id.context_uuid.uuid,
rw_copy=False)
slice_rw = Slice()
slice_rw.CopyFrom(request if slice_ro is None else slice_ro)
slice_rw.name = request.name
slice_rw.slice_owner.CopyFrom(request.slice_owner) # pylint: disable=no-member
slice_rw.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_PLANNED # pylint: disable=no-member
slice_request = Slice()
slice_request.CopyFrom(_slice)
copy_endpoint_ids(request.slice_endpoint_ids, slice_rw.slice_endpoint_ids ) # pylint: disable=no-member
copy_constraints (request.slice_constraints, slice_rw.slice_constraints ) # pylint: disable=no-member
copy_config_rules(request.slice_config.config_rules, slice_rw.slice_config.config_rules) # pylint: disable=no-member
if len(request.slice_endpoint_ids) < 2:
slice_id_with_uuids = context_client.SetSlice(slice_rw)
if len(slice_rw.slice_endpoint_ids) < 2: # pylint: disable=no-member
# unable to identify the kind of slice; just update endpoints, constraints and config rules
# update the slice in database, and return
# pylint: disable=no-member
copy_endpoint_ids(request.slice_endpoint_ids, slice_request.slice_endpoint_ids)
copy_constraints(request.slice_constraints, slice_request.slice_constraints)
copy_config_rules(request.slice_config.config_rules, slice_request.slice_config.config_rules)
return context_client.SetSlice(slice_request)
return context_client.SetSlice(slice_rw)
slice_with_uuids = context_client.GetSlice(slice_id_with_uuids)
#LOGGER.info('json_current_slice = {:s}'.format(str(json_current_slice)))
#json_updated_slice = grpc_message_to_json(request)
......@@ -67,9 +72,9 @@ class SliceServiceServicerImpl(SliceServiceServicer):
#changes = deepdiff.DeepDiff(json_current_slice, json_updated_slice)
#LOGGER.info('changes = {:s}'.format(str(changes)))
if is_multi_domain(context_client, request.slice_endpoint_ids):
if is_multi_domain(context_client, slice_with_uuids.slice_endpoint_ids):
interdomain_client = InterdomainClient()
slice_id = interdomain_client.RequestSlice(request)
slice_id = interdomain_client.RequestSlice(slice_with_uuids)
slice_ = context_client.GetSlice(slice_id)
slice_active = Slice()
slice_active.CopyFrom(slice_)
......@@ -80,8 +85,8 @@ class SliceServiceServicerImpl(SliceServiceServicer):
# Local domain slice
service_id = ServiceId()
# pylint: disable=no-member
context_uuid = service_id.context_id.context_uuid.uuid = request.slice_id.context_id.context_uuid.uuid
service_uuid = service_id.service_uuid.uuid = request.slice_id.slice_uuid.uuid
context_uuid = service_id.context_id.context_uuid.uuid = slice_with_uuids.slice_id.context_id.context_uuid.uuid
service_uuid = service_id.service_uuid.uuid = slice_with_uuids.slice_id.slice_uuid.uuid
service_client = ServiceClient()
try:
......@@ -136,13 +141,13 @@ class SliceServiceServicerImpl(SliceServiceServicer):
service_client.UpdateService(service_request)
copy_endpoint_ids(request.slice_endpoint_ids, slice_request.slice_endpoint_ids)
copy_constraints(request.slice_constraints, slice_request.slice_constraints)
copy_config_rules(request.slice_config.config_rules, slice_request.slice_config.config_rules)
#copy_endpoint_ids(request.slice_endpoint_ids, slice_with_uuids.slice_endpoint_ids)
#copy_constraints(request.slice_constraints, slice_with_uuids.slice_constraints)
#copy_config_rules(request.slice_config.config_rules, slice_with_uuids.slice_config.config_rules)
update_service_ids(slice_request.slice_service_ids, context_uuid, service_uuid)
context_client.SetSlice(slice_request)
slice_id = slice_request.slice_id
update_service_ids(slice_with_uuids.slice_service_ids, context_uuid, service_uuid)
context_client.SetSlice(slice_with_uuids)
slice_id = slice_with_uuids.slice_id
slice_ = context_client.GetSlice(slice_id)
slice_active = Slice()
......@@ -194,14 +199,14 @@ class SliceServiceServicerImpl(SliceServiceServicer):
else:
current_slice = Slice()
current_slice.CopyFrom(_slice)
current_slice.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_DEINIT
current_slice.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_DEINIT # pylint: disable=no-member
context_client.SetSlice(current_slice)
service_client = ServiceClient()
for service_id in _slice.slice_service_ids:
current_slice = Slice()
current_slice.slice_id.CopyFrom(_slice.slice_id)
slice_service_id = current_slice.slice_service_ids.add()
current_slice.slice_id.CopyFrom(_slice.slice_id) # pylint: disable=no-member
slice_service_id = current_slice.slice_service_ids.add() # pylint: disable=no-member
slice_service_id.CopyFrom(service_id)
context_client.UnsetSlice(current_slice)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment