docs: def save(self):
          """
          save or update this cluster in Ariane Server
          :return:
          """
          LOGGER.debug("Cluster.save")
          post_payload = {}
          consolidated_containers_id = []
  
          if self.id is not None:
              post_payload['clusterID'] = self.id
  
          if self.name is not None:
              post_payload['clusterName'] = self.name
  
          if self.containers_id is not None:
              consolidated_containers_id = copy.deepcopy(self.containers_id)
          if self.containers_2_rm is not None:
              for container_2_rm in self.containers_2_rm:
                  if container_2_rm.id is None:
                      container_2_rm.sync()
                  consolidated_containers_id.remove(container_2_rm.id)
          if self.containers_2_add is not None:
              for container_2_add in self.containers_2_add:
                  if container_2_add.id is None:
                      container_2_add.save()
                  consolidated_containers_id.append(container_2_add.id)
          post_payload['clusterContainersID'] = consolidated_containers_id
  
          params = SessionService.complete_transactional_req({'payload': json.dumps(post_payload)})
          if MappingService.driver_type != DriverFactory.DRIVER_REST:
              params['OPERATION'] = 'createCluster'
              args = {'properties': params}
          else:
              args = {
                  'http_operation': 'POST',
                  'operation_path': '',
                  'parameters': params
              }
  
          response = ClusterService.requester.call(args)
  
          if MappingService.driver_type != DriverFactory.DRIVER_REST:
              response = response.get()
  
          if response.rc != 0:
              LOGGER.warning('Cluster.save - Problem while saving cluster' + self.name +
                             '. Reason: ' + str(response.response_content) + ' - ' + str(response.error_message) +
                             " (" + str(response.rc) + ")")
              if response.rc == 500 and ArianeMappingOverloadError.ERROR_MSG in response.error_message:
                  raise ArianeMappingOverloadError("Cluster.save", ArianeMappingOverloadError.ERROR_MSG)
              # traceback.print_stack()
          else:
              self.id = response.response_content['clusterID']
              if self.containers_2_add is not None:
                  for container_2_add in self.containers_2_add:
                      container_2_add.sync()
              if self.containers_2_rm is not None:
                  for container_2_rm in self.containers_2_rm:
                      container_2_rm.sync()
              self.sync(json_obj=response.response_content)
          self.containers_2_add.clear()
          self.containers_2_rm.clear()