docs: def bind(self, binding, parameters):
          """ Create the binding
          
          Args:
              binding (AtlasServiceBinding.Binding): Existing or New binding
              parameters (dict): Parameters for the binding
              
          Returns:
              Binding: Status
              
          Raises:
              ErrBindingAlreadyExists: If binding exists but with different parameters
          """
          
          if not binding.isProvisioned():
              # Update binding parameters
              binding.parameters = parameters
              
              #  Credentials
              creds = self.backend.config.generate_binding_credentials(binding)
              
              # Binding
              p = self.backend.config.generate_binding_permissions(
                  binding,
                  DatabaseUsersPermissionsSpecs(creds["username"],creds["password"])
                  )
              
              try:
                  self.backend.atlas.DatabaseUsers.create_a_database_user(p)
              except ErrAtlasConflict:
                  # The user already exists. This is not an issue because this is possible that we
                  # created it in a previous call that failed later on the broker.
                  pass
              
              self.backend.storage.store(binding)
              
              # Bind done
              return Binding(BindState.SUCCESSFUL_BOUND,
                             credentials = creds)
          
          elif binding.parameters == parameters:
              if self.backend.config.isGenerateBindingCredentialsPredictible():
                  # Identical and credentials generation is predictible so we can return credentials again.
                  creds = self.backend.config.generate_binding_credentials(binding)
                  
                  return Binding(BindState.IDENTICAL_ALREADY_EXISTS,
                                 credentials = creds)
              
              # Identical but credentials generation is NOT predictible. So we are breaking the spec to avoid
              # wrong data injection. In this case we trigger a conflicting parameters for the existing binding depsite
              # this is not the case.
              raise ErrBindingAlreadyExists()
          
          else:
              # Different parameters ...
              raise ErrBindingAlreadyExists()