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

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()