### Summary

While setting up sonarqube and automating setting the admin password directly in the database, I noticed that their bcrypt implementation is outdated and only supports the 2a version, while the password_hash bcrypt filter using passlib defaults to the latest version (2b).

I'd like to set the ident parameter of passlib bcrypt function from the password_hash filter (like with rounds).

Right now I'm doing this:
```yaml
    - name: encrypt password
      command:
        cmd: python3 -
        stdin: |
          from passlib.hash import bcrypt
          print(bcrypt.using(rounds=12,ident="2a").hash("{{ admin_password }}"))
      register: tmp
```
as a workaround.

Obviously, sonarqube should upgrade their bcrypt version, but ansible should also be able to handle this.

Passlib doc: https://passlib.readthedocs.io/en/stable/lib/passlib.hash.bcrypt.html#

### Issue Type

Feature Idea

### Component Name

password_hash

### Additional Information

```yaml
password: "{{ admin_password | password_hash('bcrypt', rounds=12, ident='2a') }}"
```

### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
res = password.random_password(length=11, chars=u'くらとみ')
        self._assert_valid_chars(res, u'くらとみ')
        self.assertEqual(len(res), 11)
    def test_gen_password(self):
        for testcase in old_style_params_data:
            params = testcase['params']
            candidate_chars = testcase['candidate_chars']
            params_chars_spec = password._gen_candidate_chars(params['chars'])
            password_string = password.random_password(length=params['length'],
                                                       chars=params_chars_spec)
            self.assertEqual(len(password_string),
                             params['length'],
                             msg='generated password=%s has length (%s) instead of expected length (%s)' %
                             (password_string, len(password_string), params['length']))
            for char in password_string:
                self.assertIn(char, candidate_chars,
                              msg='%s not found in %s from chars spect %s' %
                              (char, candidate_chars, params['chars']))
class TestParseContent(unittest.TestCase):
    def test_empty_password_file(self):
        plaintext_password, salt = password._parse_content(u'')
        self.assertEqual(plaintext_password, u'')
        self.assertEqual(salt, None)
    def test(self):
        expected_content = u'12345678'
        file_content = expected_content
        plaintext_password, salt = password._parse_content(file_content)
        self.assertEqual(plaintext_password, expected_content)
        self.assertEqual(salt, None)
    def test_with_salt(self):