chore: add more pre-commit-config
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 54088b0..7e90a18 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -6,7 +6,7 @@
   build-prometheus-ethtool-exporter:
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3.0.2 
+      - uses: actions/checkout@v3.0.2
         with:
           fetch-depth: 0
       - uses: tj-actions/changed-files@v29.0.7
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index cc39e47..b10d6c8 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -3,4 +3,21 @@
     rev: v2.0.0
     hooks:
       - id: conventional-pre-commit
-        stages: [commit-msg]
+        stages:
+           - commit-msg
+
+  - repo: https://github.com/psf/black
+    rev: 22.8.0
+    hooks:
+      - id: black
+
+  - repo: https://github.com/pycqa/isort
+    rev: 5.10.1
+    hooks:
+      - id: isort
+
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v4.3.0
+    hooks:
+      - id: end-of-file-fixer
+      - id: trailing-whitespace
diff --git a/doc/requirements.txt b/doc/requirements.txt
index e796768..8e38ac0 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -3,4 +3,4 @@
 sphinx_rtd_theme
 reno[sphinx]
 https://github.com/ypid/yaml4rst/archive/master.tar.gz
-https://github.com/debops/yaml2rst/archive/master.tar.gz
\ No newline at end of file
+https://github.com/debops/yaml2rst/archive/master.tar.gz
diff --git a/doc/source/_templates/yaml4rst/defaults_header.j2 b/doc/source/_templates/yaml4rst/defaults_header.j2
index b15a2e1..5634148 100644
--- a/doc/source/_templates/yaml4rst/defaults_header.j2
+++ b/doc/source/_templates/yaml4rst/defaults_header.j2
@@ -8,4 +8,4 @@
 # =================
 
 # .. contents:: Sections
-#    :local:
\ No newline at end of file
+#    :local:
diff --git a/doc/source/conf.py b/doc/source/conf.py
index ce1d48d..d846a1b 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -22,38 +22,40 @@
 # import sys
 # sys.path.insert(0, os.path.abspath('.'))
 
+import glob
+
 # -- yaml2rst ----------------------------------------------------------------
 import os
-import glob
+import pathlib
+
 import yaml2rst
 from yaml4rst.reformatter import YamlRstReformatter
-import pathlib
 
 for defaults_file in glob.glob("../../roles/*/defaults/main.yml"):
     role_name = defaults_file.split("/")[-3]
 
     YamlRstReformatter._HEADER_END_LINES = {
-        'yaml4rst': [
-            '# Default variables',
-            '#    :local:',
-            '# .. contents:: Sections',
-            '# .. include:: includes/all.rst',
-            '# .. include:: includes/role.rst',
-            '# .. include:: ../../../includes/global.rst',
-            '# -----------------',
+        "yaml4rst": [
+            "# Default variables",
+            "#    :local:",
+            "# .. contents:: Sections",
+            "# .. include:: includes/all.rst",
+            "# .. include:: includes/role.rst",
+            "# .. include:: ../../../includes/global.rst",
+            "# -----------------",
         ],
     }
 
     reformatter = YamlRstReformatter(
-        preset='yaml4rst',
+        preset="yaml4rst",
         template_path=os.path.join(
             os.path.abspath(os.path.dirname(__file__)),
-            '_templates',
+            "_templates",
         ),
         config={
-            'ansible_full_role_name': f"vexxhost.atmosphere.{role_name}",
-            'ansible_role_name': role_name,
-        }
+            "ansible_full_role_name": f"vexxhost.atmosphere.{role_name}",
+            "ansible_role_name": role_name,
+        },
     )
     reformatter.read_file(defaults_file)
     reformatter.reformat()
@@ -67,16 +69,16 @@
     rst_content = yaml2rst.convert_file(
         defaults_file,
         f"roles/{role_name}/defaults/main.rst",
-        strip_regex=r'\s*(:?\[{3}|\]{3})\d?$',
-        yaml_strip_regex=r'^\s{66,67}#\s\]{3}\d?$',
+        strip_regex=r"\s*(:?\[{3}|\]{3})\d?$",
+        yaml_strip_regex=r"^\s{66,67}#\s\]{3}\d?$",
     )
 
 
 # -- Project information -----------------------------------------------------
 
-project = 'Atmosphere'
-copyright = '2022, VEXXHOST, Inc.'
-author = 'VEXXHOST, Inc.'
+project = "Atmosphere"
+copyright = "2022, VEXXHOST, Inc."
+author = "VEXXHOST, Inc."
 
 
 # -- General configuration ---------------------------------------------------
@@ -85,11 +87,11 @@
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 # ones.
 extensions = [
-    'reno.sphinxext',
+    "reno.sphinxext",
 ]
 
 # Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
+templates_path = ["_templates"]
 
 # List of patterns, relative to source directory, that match files and
 # directories to ignore when looking for source files.
@@ -102,9 +104,9 @@
 # The theme to use for HTML and HTML Help pages.  See the documentation for
 # a list of builtin themes.
 #
-html_theme = 'sphinx_rtd_theme'
+html_theme = "sphinx_rtd_theme"
 
 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
 # so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
+html_static_path = ["_static"]
diff --git a/doc/source/releasenotes.rst b/doc/source/releasenotes.rst
index f182f00..dbd6f82 100644
--- a/doc/source/releasenotes.rst
+++ b/doc/source/releasenotes.rst
@@ -1,4 +1,4 @@
 Release Notes
 =============
 
-.. release-notes::
\ No newline at end of file
+.. release-notes::
diff --git a/doc/source/roles/build_openstack_requirements/index.rst b/doc/source/roles/build_openstack_requirements/index.rst
index bcdfa7e..0398a5c 100644
--- a/doc/source/roles/build_openstack_requirements/index.rst
+++ b/doc/source/roles/build_openstack_requirements/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/ceph_csi_rbd/index.rst b/doc/source/roles/ceph_csi_rbd/index.rst
index 4148d09..08ae6ff 100644
--- a/doc/source/roles/ceph_csi_rbd/index.rst
+++ b/doc/source/roles/ceph_csi_rbd/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/ceph_mon/index.rst b/doc/source/roles/ceph_mon/index.rst
index 3cdec24..e960778 100644
--- a/doc/source/roles/ceph_mon/index.rst
+++ b/doc/source/roles/ceph_mon/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/ceph_osd/index.rst b/doc/source/roles/ceph_osd/index.rst
index 3591ee1..566f156 100644
--- a/doc/source/roles/ceph_osd/index.rst
+++ b/doc/source/roles/ceph_osd/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/ceph_repository/index.rst b/doc/source/roles/ceph_repository/index.rst
index 090527f..2f4a3ea 100644
--- a/doc/source/roles/ceph_repository/index.rst
+++ b/doc/source/roles/ceph_repository/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/cert_manager/index.rst b/doc/source/roles/cert_manager/index.rst
index 81a18b8..43f12e5 100644
--- a/doc/source/roles/cert_manager/index.rst
+++ b/doc/source/roles/cert_manager/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/containerd/index.rst b/doc/source/roles/containerd/index.rst
index 0ebf780..18efcb9 100644
--- a/doc/source/roles/containerd/index.rst
+++ b/doc/source/roles/containerd/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/csi/index.rst b/doc/source/roles/csi/index.rst
index 3cf76af..ddf620b 100644
--- a/doc/source/roles/csi/index.rst
+++ b/doc/source/roles/csi/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/helm/index.rst b/doc/source/roles/helm/index.rst
index 6c8de12..fee6c74 100644
--- a/doc/source/roles/helm/index.rst
+++ b/doc/source/roles/helm/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/ipmi_exporter/index.rst b/doc/source/roles/ipmi_exporter/index.rst
index 28dbfba..cfd9ef8 100644
--- a/doc/source/roles/ipmi_exporter/index.rst
+++ b/doc/source/roles/ipmi_exporter/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/keepalived/index.rst b/doc/source/roles/keepalived/index.rst
index de5844e..f358c35 100644
--- a/doc/source/roles/keepalived/index.rst
+++ b/doc/source/roles/keepalived/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/kube_prometheus_stack/index.rst b/doc/source/roles/kube_prometheus_stack/index.rst
index 3ed41da..5a32ad9 100644
--- a/doc/source/roles/kube_prometheus_stack/index.rst
+++ b/doc/source/roles/kube_prometheus_stack/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/kubernetes/index.rst b/doc/source/roles/kubernetes/index.rst
index a8b9bcc..68f6ec7 100644
--- a/doc/source/roles/kubernetes/index.rst
+++ b/doc/source/roles/kubernetes/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_cli/index.rst b/doc/source/roles/openstack_cli/index.rst
index 246af3b..d98260e 100644
--- a/doc/source/roles/openstack_cli/index.rst
+++ b/doc/source/roles/openstack_cli/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_exporter/index.rst b/doc/source/roles/openstack_exporter/index.rst
index 9cedd84..296257d 100644
--- a/doc/source/roles/openstack_exporter/index.rst
+++ b/doc/source/roles/openstack_exporter/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_barbican/index.rst b/doc/source/roles/openstack_helm_barbican/index.rst
index 7a449d8..5a26c99 100644
--- a/doc/source/roles/openstack_helm_barbican/index.rst
+++ b/doc/source/roles/openstack_helm_barbican/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_cinder/index.rst b/doc/source/roles/openstack_helm_cinder/index.rst
index f9fb91c..5bc6b01 100644
--- a/doc/source/roles/openstack_helm_cinder/index.rst
+++ b/doc/source/roles/openstack_helm_cinder/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_endpoints/index.rst b/doc/source/roles/openstack_helm_endpoints/index.rst
index aad51b7..a2796b8 100644
--- a/doc/source/roles/openstack_helm_endpoints/index.rst
+++ b/doc/source/roles/openstack_helm_endpoints/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_glance/index.rst b/doc/source/roles/openstack_helm_glance/index.rst
index a9868c6..c16251f 100644
--- a/doc/source/roles/openstack_helm_glance/index.rst
+++ b/doc/source/roles/openstack_helm_glance/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_heat/index.rst b/doc/source/roles/openstack_helm_heat/index.rst
index c77c442..b2f4435 100644
--- a/doc/source/roles/openstack_helm_heat/index.rst
+++ b/doc/source/roles/openstack_helm_heat/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_horizon/index.rst b/doc/source/roles/openstack_helm_horizon/index.rst
index c017ea4..71079cf 100644
--- a/doc/source/roles/openstack_helm_horizon/index.rst
+++ b/doc/source/roles/openstack_helm_horizon/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_infra_ceph_provisioners/index.rst b/doc/source/roles/openstack_helm_infra_ceph_provisioners/index.rst
index 83a0d64..7e6f0ca 100644
--- a/doc/source/roles/openstack_helm_infra_ceph_provisioners/index.rst
+++ b/doc/source/roles/openstack_helm_infra_ceph_provisioners/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_infra_libvirt/index.rst b/doc/source/roles/openstack_helm_infra_libvirt/index.rst
index 355ff12..b2b7b35 100644
--- a/doc/source/roles/openstack_helm_infra_libvirt/index.rst
+++ b/doc/source/roles/openstack_helm_infra_libvirt/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_infra_memcached/index.rst b/doc/source/roles/openstack_helm_infra_memcached/index.rst
index 8e39b8e..cf020cd 100644
--- a/doc/source/roles/openstack_helm_infra_memcached/index.rst
+++ b/doc/source/roles/openstack_helm_infra_memcached/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_infra_openvswitch/index.rst b/doc/source/roles/openstack_helm_infra_openvswitch/index.rst
index 6f7e857..57ab7cf 100644
--- a/doc/source/roles/openstack_helm_infra_openvswitch/index.rst
+++ b/doc/source/roles/openstack_helm_infra_openvswitch/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_ingress/index.rst b/doc/source/roles/openstack_helm_ingress/index.rst
index b068625..7a126e3 100644
--- a/doc/source/roles/openstack_helm_ingress/index.rst
+++ b/doc/source/roles/openstack_helm_ingress/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_keystone/index.rst b/doc/source/roles/openstack_helm_keystone/index.rst
index bb37000..c928143 100644
--- a/doc/source/roles/openstack_helm_keystone/index.rst
+++ b/doc/source/roles/openstack_helm_keystone/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_neutron/index.rst b/doc/source/roles/openstack_helm_neutron/index.rst
index a84eff8..4cc5106 100644
--- a/doc/source/roles/openstack_helm_neutron/index.rst
+++ b/doc/source/roles/openstack_helm_neutron/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_nova/index.rst b/doc/source/roles/openstack_helm_nova/index.rst
index 5fbfafb..a4b3ff5 100644
--- a/doc/source/roles/openstack_helm_nova/index.rst
+++ b/doc/source/roles/openstack_helm_nova/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_placement/index.rst b/doc/source/roles/openstack_helm_placement/index.rst
index f5f67e3..87157c4 100644
--- a/doc/source/roles/openstack_helm_placement/index.rst
+++ b/doc/source/roles/openstack_helm_placement/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_senlin/index.rst b/doc/source/roles/openstack_helm_senlin/index.rst
index 982967e..085df9c 100644
--- a/doc/source/roles/openstack_helm_senlin/index.rst
+++ b/doc/source/roles/openstack_helm_senlin/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/roles/openstack_helm_tempest/index.rst b/doc/source/roles/openstack_helm_tempest/index.rst
index 5a084e5..f9cf349 100644
--- a/doc/source/roles/openstack_helm_tempest/index.rst
+++ b/doc/source/roles/openstack_helm_tempest/index.rst
@@ -7,4 +7,4 @@
 .. toctree::
    :maxdepth: 2
 
-   defaults/main
\ No newline at end of file
+   defaults/main
diff --git a/doc/source/user/index.rst b/doc/source/user/index.rst
index de66057..5be5b8e 100644
--- a/doc/source/user/index.rst
+++ b/doc/source/user/index.rst
@@ -4,4 +4,4 @@
 .. toctree::
    :maxdepth: 1
 
-   quickstart
\ No newline at end of file
+   quickstart
diff --git a/docs/certificates.md b/docs/certificates.md
index baedc4d..8beefbe 100644
--- a/docs/certificates.md
+++ b/docs/certificates.md
@@ -85,4 +85,4 @@
   tls.key: |
     CA_PRIVATE_KEY_HERE
 ```
-NOTE: If your issuer represents an intermediate, ensure that tls.crt contains the issuer's full chain in the correct order: issuer -> intermediate(s) -> root.
\ No newline at end of file
+NOTE: If your issuer represents an intermediate, ensure that tls.crt contains the issuer's full chain in the correct order: issuer -> intermediate(s) -> root.
diff --git a/molecule/default/requirements.txt b/molecule/default/requirements.txt
index 1bcbc4b..862d238 100644
--- a/molecule/default/requirements.txt
+++ b/molecule/default/requirements.txt
@@ -1,3 +1,3 @@
 molecule==3.5.2 # https://github.com/ansible-community/molecule/issues/3435
 openstacksdk==0.61.0
-netaddr
\ No newline at end of file
+netaddr
diff --git a/playbooks/cleanup.yml b/playbooks/cleanup.yml
index 49031d4..47933af 100644
--- a/playbooks/cleanup.yml
+++ b/playbooks/cleanup.yml
@@ -32,4 +32,4 @@
         kind: PersistentVolumeClaim
         namespace: openstack
         name: "rabbitmq-data-rabbitmq-rabbitmq-{{ item }}"
-      loop: "{{ range(0, 3) | list }}"
\ No newline at end of file
+      loop: "{{ range(0, 3) | list }}"
diff --git a/playbooks/generate_workspace.yml b/playbooks/generate_workspace.yml
index c072d94..9214452 100644
--- a/playbooks/generate_workspace.yml
+++ b/playbooks/generate_workspace.yml
@@ -180,7 +180,7 @@
       ansible.builtin.file:
         path: "{{ _endpoints_path }}"
         state: touch
-    
+
     - name: Load the current endpoints into a variable
       ansible.builtin.include_vars:
         file: "{{ _endpoints_path }}"
diff --git a/playbooks/site.yml b/playbooks/site.yml
index f1eaefb..d27b276 100644
--- a/playbooks/site.yml
+++ b/playbooks/site.yml
@@ -15,4 +15,4 @@
 - import_playbook: vexxhost.atmosphere.ceph
 - import_playbook: vexxhost.atmosphere.kubernetes
 - import_playbook: vexxhost.atmosphere.openstack
-- import_playbook: vexxhost.atmosphere.cleanup
\ No newline at end of file
+- import_playbook: vexxhost.atmosphere.cleanup
diff --git a/plugins/module_utils/ca_common.py b/plugins/module_utils/ca_common.py
index 380463b..5336582 100644
--- a/plugins/module_utils/ca_common.py
+++ b/plugins/module_utils/ca_common.py
@@ -1,26 +1,28 @@
-import os
 import datetime
+import os
 
 
-def generate_ceph_cmd(sub_cmd, args, user_key=None, cluster='ceph', user='client.admin', container_image=None, interactive=False):
-    '''
+def generate_ceph_cmd(
+    sub_cmd,
+    args,
+    user_key=None,
+    cluster="ceph",
+    user="client.admin",
+    container_image=None,
+    interactive=False,
+):
+    """
     Generate 'ceph' command line to execute
-    '''
+    """
 
     if not user_key:
-        user_key = '/etc/ceph/{}.{}.keyring'.format(cluster, user)
+        user_key = "/etc/ceph/{}.{}.keyring".format(cluster, user)
 
     cmd = pre_generate_ceph_cmd(
-        container_image=container_image, interactive=interactive)
+        container_image=container_image, interactive=interactive
+    )
 
-    base_cmd = [
-        '-n',
-        user,
-        '-k',
-        user_key,
-        '--cluster',
-        cluster
-    ]
+    base_cmd = ["-n", user, "-k", user_key, "--cluster", cluster]
     base_cmd.extend(sub_cmd)
     cmd.extend(base_cmd + args)
 
@@ -28,32 +30,40 @@
 
 
 def container_exec(binary, container_image, interactive=False):
-    '''
+    """
     Build the docker CLI to run a command inside a container
-    '''
+    """
 
-    container_binary = os.getenv('CEPH_CONTAINER_BINARY')
-    command_exec = [container_binary, 'run']
+    container_binary = os.getenv("CEPH_CONTAINER_BINARY")
+    command_exec = [container_binary, "run"]
 
     if interactive:
-        command_exec.extend(['--interactive'])
+        command_exec.extend(["--interactive"])
 
-    command_exec.extend(['--rm',
-                         '--net=host',
-                         '-v', '/etc/ceph:/etc/ceph:z',
-                         '-v', '/var/lib/ceph/:/var/lib/ceph/:z',
-                         '-v', '/var/log/ceph/:/var/log/ceph/:z',
-                         '--entrypoint=' + binary, container_image])
+    command_exec.extend(
+        [
+            "--rm",
+            "--net=host",
+            "-v",
+            "/etc/ceph:/etc/ceph:z",
+            "-v",
+            "/var/lib/ceph/:/var/lib/ceph/:z",
+            "-v",
+            "/var/log/ceph/:/var/log/ceph/:z",
+            "--entrypoint=" + binary,
+            container_image,
+        ]
+    )
     return command_exec
 
 
 def is_containerized():
-    '''
+    """
     Check if we are running on a containerized cluster
-    '''
+    """
 
-    if 'CEPH_CONTAINER_IMAGE' in os.environ:
-        container_image = os.getenv('CEPH_CONTAINER_IMAGE')
+    if "CEPH_CONTAINER_IMAGE" in os.environ:
+        container_image = os.getenv("CEPH_CONTAINER_IMAGE")
     else:
         container_image = None
 
@@ -61,21 +71,21 @@
 
 
 def pre_generate_ceph_cmd(container_image=None, interactive=False):
-    '''
+    """
     Generate ceph prefix comaand
-    '''
+    """
     if container_image:
-        cmd = container_exec('ceph', container_image, interactive=interactive)
+        cmd = container_exec("ceph", container_image, interactive=interactive)
     else:
-        cmd = ['ceph']
+        cmd = ["ceph"]
 
     return cmd
 
 
 def exec_command(module, cmd, stdin=None):
-    '''
+    """
     Execute command(s)
-    '''
+    """
 
     binary_data = False
     if stdin:
@@ -85,7 +95,9 @@
     return rc, cmd, out, err
 
 
-def exit_module(module, out, rc, cmd, err, startd, changed=False, diff=dict(before="", after="")):
+def exit_module(
+    module, out, rc, cmd, err, startd, changed=False, diff=dict(before="", after="")
+):
     endd = datetime.datetime.now()
     delta = endd - startd
 
@@ -98,17 +110,17 @@
         stdout=out.rstrip("\r\n"),
         stderr=err.rstrip("\r\n"),
         changed=changed,
-        diff=diff
+        diff=diff,
     )
     module.exit_json(**result)
 
 
 def fatal(message, module):
-    '''
+    """
     Report a fatal error and exit
-    '''
+    """
 
     if module:
         module.fail_json(msg=message, rc=1)
     else:
-        raise(Exception(message))
+        raise (Exception(message))
diff --git a/plugins/modules/ceph_config.py b/plugins/modules/ceph_config.py
index 0c7a183..968ba8e 100644
--- a/plugins/modules/ceph_config.py
+++ b/plugins/modules/ceph_config.py
@@ -2,34 +2,30 @@
 
 from ansible.module_utils.basic import AnsibleModule
 
+
 def run_module():
     module_args = dict(
-        who=dict(type='str', required=True),
-        name=dict(type='str', required=True),
-        value=dict(type='str', required=True),
+        who=dict(type="str", required=True),
+        name=dict(type="str", required=True),
+        value=dict(type="str", required=True),
     )
 
-    module = AnsibleModule(
-        argument_spec=module_args,
-        supports_check_mode=True
-    )
+    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)
 
-    who = module.params['who']
-    name = module.params['name']
-    value = module.params['value']
+    who = module.params["who"]
+    name = module.params["name"]
+    value = module.params["value"]
 
     changed = False
 
-    _, out, _ = module.run_command(
-        ['ceph', 'config', 'get', who, name], check_rc=True
-    )
+    _, out, _ = module.run_command(["ceph", "config", "get", who, name], check_rc=True)
 
     if out.strip() != value:
         changed = True
 
     if not module.check_mode:
         _, _, _ = module.run_command(
-            ['ceph', 'config', 'set', who, name, value], check_rc=True
+            ["ceph", "config", "set", who, name, value], check_rc=True
         )
 
     module.exit_json(changed=changed)
@@ -39,5 +35,5 @@
     run_module()
 
 
-if __name__ == '__main__':
-    main()
\ No newline at end of file
+if __name__ == "__main__":
+    main()
diff --git a/plugins/modules/ceph_key.py b/plugins/modules/ceph_key.py
index 437a0d3..33cb13f 100644
--- a/plugins/modules/ceph_key.py
+++ b/plugins/modules/ceph_key.py
@@ -15,30 +15,32 @@
 # limitations under the License.
 
 from __future__ import absolute_import, division, print_function
+
 __metaclass__ = type
 
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.vexxhost.atmosphere.plugins.module_utils.ca_common import generate_ceph_cmd, \
-    is_containerized, \
-    container_exec, \
-    fatal
-
+import base64
 import datetime
 import json
 import os
+import socket
 import struct
 import time
-import base64
-import socket
 
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.vexxhost.atmosphere.plugins.module_utils.ca_common import (
+    container_exec,
+    fatal,
+    generate_ceph_cmd,
+    is_containerized,
+)
 
 ANSIBLE_METADATA = {
-    'metadata_version': '1.1',
-    'status': ['preview'],
-    'supported_by': 'community'
+    "metadata_version": "1.1",
+    "status": ["preview"],
+    "supported_by": "community",
 }
 
-DOCUMENTATION = '''
+DOCUMENTATION = """
 ---
 module: ceph_key
 
@@ -124,9 +126,9 @@
             entity.
         required: false
         default: json
-'''
+"""
 
-EXAMPLES = '''
+EXAMPLES = """
 
 keys_to_create:
   - { name: client.key, key: "AQAin8tUUK84ExAA/QgBtI7gEMWdmnvKBzlXdQ==", caps: { mon: "allow rwx", mds: "allow *" } , mode: "0600" }  # noqa: E501
@@ -198,13 +200,20 @@
 - name: fetch cephx keys
   ceph_key:
     state: fetch_initial_keys
-'''
+"""
 
-RETURN = '''#  '''
+RETURN = """#  """
 
 
-CEPH_INITIAL_KEYS = ['client.admin', 'client.bootstrap-mds', 'client.bootstrap-mgr',  # noqa: E501
-                     'client.bootstrap-osd', 'client.bootstrap-rbd', 'client.bootstrap-rbd-mirror', 'client.bootstrap-rgw']  # noqa: E501
+CEPH_INITIAL_KEYS = [
+    "client.admin",
+    "client.bootstrap-mds",
+    "client.bootstrap-mgr",  # noqa: E501
+    "client.bootstrap-osd",
+    "client.bootstrap-rbd",
+    "client.bootstrap-rbd-mirror",
+    "client.bootstrap-rgw",
+]  # noqa: E501
 
 
 def str_to_bool(val):
@@ -212,30 +221,30 @@
         val = val.lower()
     except AttributeError:
         val = str(val).lower()
-    if val == 'true':
+    if val == "true":
         return True
-    elif val == 'false':
+    elif val == "false":
         return False
     else:
         raise ValueError("Invalid input value: %s" % val)
 
 
 def generate_secret():
-    '''
+    """
     Generate a CephX secret
-    '''
+    """
 
     key = os.urandom(16)
-    header = struct.pack('<hiih', 1, int(time.time()), 0, len(key))
+    header = struct.pack("<hiih", 1, int(time.time()), 0, len(key))
     secret = base64.b64encode(header + key)
 
     return secret
 
 
 def generate_caps(_type, caps):
-    '''
+    """
     Generate CephX capabilities list
-    '''
+    """
 
     caps_cli = []
 
@@ -251,25 +260,26 @@
     return caps_cli
 
 
-def generate_ceph_authtool_cmd(cluster, name, secret, caps, dest, container_image=None):  # noqa: E501
-    '''
+def generate_ceph_authtool_cmd(
+    cluster, name, secret, caps, dest, container_image=None
+):  # noqa: E501
+    """
     Generate 'ceph-authtool' command line to execute
-    '''
+    """
 
     if container_image:
-        binary = 'ceph-authtool'
-        cmd = container_exec(
-            binary, container_image)
+        binary = "ceph-authtool"
+        cmd = container_exec(binary, container_image)
     else:
-        binary = ['ceph-authtool']
+        binary = ["ceph-authtool"]
         cmd = binary
 
     base_cmd = [
-        '--create-keyring',
+        "--create-keyring",
         dest,
-        '--name',
+        "--name",
         name,
-        '--add-key',
+        "--add-key",
         secret,
     ]
 
@@ -279,133 +289,168 @@
     return cmd
 
 
-def create_key(module, result, cluster, user, user_key, name, secret, caps, import_key, dest, container_image=None):  # noqa: E501
-    '''
+def create_key(
+    module,
+    result,
+    cluster,
+    user,
+    user_key,
+    name,
+    secret,
+    caps,
+    import_key,
+    dest,
+    container_image=None,
+):  # noqa: E501
+    """
     Create a CephX key
-    '''
+    """
 
     cmd_list = []
     if not secret:
         secret = generate_secret()
 
-    if user == 'client.admin':
-        args = ['import', '-i', dest]
+    if user == "client.admin":
+        args = ["import", "-i", dest]
     else:
-        args = ['get-or-create', name]
+        args = ["get-or-create", name]
         args.extend(generate_caps(None, caps))
-        args.extend(['-o', dest])
+        args.extend(["-o", dest])
 
-    cmd_list.append(generate_ceph_authtool_cmd(
-        cluster, name, secret, caps, dest, container_image))
+    cmd_list.append(
+        generate_ceph_authtool_cmd(cluster, name, secret, caps, dest, container_image)
+    )
 
-    if import_key or user != 'client.admin':
-        cmd_list.append(generate_ceph_cmd(sub_cmd=['auth'],
-                                          args=args,
-                                          cluster=cluster,
-                                          user=user,
-                                          user_key=user_key,
-                                          container_image=container_image))
+    if import_key or user != "client.admin":
+        cmd_list.append(
+            generate_ceph_cmd(
+                sub_cmd=["auth"],
+                args=args,
+                cluster=cluster,
+                user=user,
+                user_key=user_key,
+                container_image=container_image,
+            )
+        )
 
     return cmd_list
 
 
 def delete_key(cluster, user, user_key, name, container_image=None):
-    '''
+    """
     Delete a CephX key
-    '''
+    """
 
     cmd_list = []
 
     args = [
-        'del',
+        "del",
         name,
     ]
 
-    cmd_list.append(generate_ceph_cmd(sub_cmd=['auth'],
-                                      args=args,
-                                      cluster=cluster,
-                                      user=user,
-                                      user_key=user_key,
-                                      container_image=container_image))
+    cmd_list.append(
+        generate_ceph_cmd(
+            sub_cmd=["auth"],
+            args=args,
+            cluster=cluster,
+            user=user,
+            user_key=user_key,
+            container_image=container_image,
+        )
+    )
 
     return cmd_list
 
 
 def get_key(cluster, user, user_key, name, dest, container_image=None):
-    '''
+    """
     Get a CephX key (write on the filesystem)
-    '''
+    """
 
     cmd_list = []
 
     args = [
-        'get',
+        "get",
         name,
-        '-o',
+        "-o",
         dest,
     ]
 
-    cmd_list.append(generate_ceph_cmd(sub_cmd=['auth'],
-                                      args=args,
-                                      cluster=cluster,
-                                      user=user,
-                                      user_key=user_key,
-                                      container_image=container_image))
+    cmd_list.append(
+        generate_ceph_cmd(
+            sub_cmd=["auth"],
+            args=args,
+            cluster=cluster,
+            user=user,
+            user_key=user_key,
+            container_image=container_image,
+        )
+    )
 
     return cmd_list
 
 
-def info_key(cluster, name, user, user_key, output_format, container_image=None):  # noqa: E501
-    '''
+def info_key(
+    cluster, name, user, user_key, output_format, container_image=None
+):  # noqa: E501
+    """
     Get information about a CephX key
-    '''
+    """
 
     cmd_list = []
 
     args = [
-        'get',
+        "get",
         name,
-        '-f',
+        "-f",
         output_format,
     ]
 
-    cmd_list.append(generate_ceph_cmd(sub_cmd=['auth'],
-                                      args=args,
-                                      cluster=cluster,
-                                      user=user,
-                                      user_key=user_key,
-                                      container_image=container_image))
+    cmd_list.append(
+        generate_ceph_cmd(
+            sub_cmd=["auth"],
+            args=args,
+            cluster=cluster,
+            user=user,
+            user_key=user_key,
+            container_image=container_image,
+        )
+    )
 
     return cmd_list
 
 
 def list_keys(cluster, user, user_key, container_image=None):
-    '''
+    """
     List all CephX keys
-    '''
+    """
 
     cmd_list = []
 
     args = [
-        'ls',
-        '-f',
-        'json',
+        "ls",
+        "-f",
+        "json",
     ]
 
-    cmd_list.append(generate_ceph_cmd(sub_cmd=['auth'],
-                                      args=args,
-                                      cluster=cluster,
-                                      user=user,
-                                      user_key=user_key,
-                                      container_image=container_image))
+    cmd_list.append(
+        generate_ceph_cmd(
+            sub_cmd=["auth"],
+            args=args,
+            cluster=cluster,
+            user=user,
+            user_key=user_key,
+            container_image=container_image,
+        )
+    )
 
     return cmd_list
 
 
 def exec_commands(module, cmd_list):
-    '''
+    """
     Execute command(s)
-    '''
+    """
 
     for cmd in cmd_list:
         rc, out, err = module.run_command(cmd)
@@ -416,15 +461,17 @@
 
 
 def lookup_ceph_initial_entities(module, out):
-    '''
+    """
     Lookup Ceph initial keys entries in the auth map
-    '''
+    """
 
     # convert out to json, ansible returns a string...
     try:
         out_dict = json.loads(out)
     except ValueError as e:
-        fatal("Could not decode 'ceph auth list' json output: {}".format(e), module)  # noqa: E501
+        fatal(
+            "Could not decode 'ceph auth list' json output: {}".format(e), module
+        )  # noqa: E501
 
     entities = []
     if "auth_dump" in out_dict:
@@ -436,21 +483,25 @@
     else:
         fatal("'auth_dump' key not present in json output:", module)  # noqa: E501
 
-    if len(entities) != len(CEPH_INITIAL_KEYS) and not str_to_bool(os.environ.get('CEPH_ROLLING_UPDATE', False)):  # noqa: E501
+    if len(entities) != len(CEPH_INITIAL_KEYS) and not str_to_bool(
+        os.environ.get("CEPH_ROLLING_UPDATE", False)
+    ):  # noqa: E501
         # must be missing in auth_dump, as if it were in CEPH_INITIAL_KEYS
         # it'd be in entities from the above test. Report what's missing.
         missing = []
         for e in CEPH_INITIAL_KEYS:
             if e not in entities:
                 missing.append(e)
-        fatal("initial keyring does not contain keys: " + ' '.join(missing), module)  # noqa: E501
+        fatal(
+            "initial keyring does not contain keys: " + " ".join(missing), module
+        )  # noqa: E501
     return entities
 
 
 def build_key_path(cluster, entity):
-    '''
+    """
     Build key path depending on the key type
-    '''
+    """
 
     if "admin" in entity:
         path = "/etc/ceph"
@@ -461,7 +512,7 @@
         # bootstrap keys show up as 'client.boostrap-osd'
         # however the directory is called '/var/lib/ceph/bootstrap-osd'
         # so we need to substring 'client.'
-        entity_split = entity.split('.')[1]
+        entity_split = entity.split(".")[1]
         keyring_filename = cluster + ".keyring"
         key_path = os.path.join(path, entity_split, keyring_filename)
     else:
@@ -472,17 +523,34 @@
 
 def run_module():
     module_args = dict(
-        cluster=dict(type='str', required=False, default='ceph'),
-        name=dict(type='str', required=False),
-        state=dict(type='str', required=False, default='present', choices=['present', 'update', 'absent',  # noqa: E501
-                                                                           'list', 'info', 'fetch_initial_keys', 'generate_secret']),  # noqa: E501
-        caps=dict(type='dict', required=False, default=None),
-        secret=dict(type='str', required=False, default=None, no_log=True),
-        import_key=dict(type='bool', required=False, default=True),
-        dest=dict(type='str', required=False, default='/etc/ceph/'),
-        user=dict(type='str', required=False, default='client.admin'),
-        user_key=dict(type='str', required=False, default=None),
-        output_format=dict(type='str', required=False, default='json', choices=['json', 'plain', 'xml', 'yaml'])  # noqa: E501
+        cluster=dict(type="str", required=False, default="ceph"),
+        name=dict(type="str", required=False),
+        state=dict(
+            type="str",
+            required=False,
+            default="present",
+            choices=[
+                "present",
+                "update",
+                "absent",  # noqa: E501
+                "list",
+                "info",
+                "fetch_initial_keys",
+                "generate_secret",
+            ],
+        ),  # noqa: E501
+        caps=dict(type="dict", required=False, default=None),
+        secret=dict(type="str", required=False, default=None, no_log=True),
+        import_key=dict(type="bool", required=False, default=True),
+        dest=dict(type="str", required=False, default="/etc/ceph/"),
+        user=dict(type="str", required=False, default="client.admin"),
+        user_key=dict(type="str", required=False, default=None),
+        output_format=dict(
+            type="str",
+            required=False,
+            default="json",
+            choices=["json", "plain", "xml", "yaml"],
+        ),  # noqa: E501
     )
 
     module = AnsibleModule(
@@ -494,27 +562,27 @@
     file_args = module.load_file_common_arguments(module.params)
 
     # Gather module parameters in variables
-    state = module.params['state']
-    name = module.params.get('name')
-    cluster = module.params.get('cluster')
-    caps = module.params.get('caps')
-    secret = module.params.get('secret')
-    import_key = module.params.get('import_key')
-    dest = module.params.get('dest')
-    user = module.params.get('user')
-    user_key = module.params.get('user_key')
-    output_format = module.params.get('output_format')
+    state = module.params["state"]
+    name = module.params.get("name")
+    cluster = module.params.get("cluster")
+    caps = module.params.get("caps")
+    secret = module.params.get("secret")
+    import_key = module.params.get("import_key")
+    dest = module.params.get("dest")
+    user = module.params.get("user")
+    user_key = module.params.get("user_key")
+    output_format = module.params.get("output_format")
 
     changed = False
 
     result = dict(
         changed=changed,
-        stdout='',
-        stderr='',
+        stdout="",
+        stderr="",
         rc=0,
-        start='',
-        end='',
-        delta='',
+        start="",
+        end="",
+        delta="",
     )
 
     if module.check_mode and state != "info":
@@ -533,66 +601,115 @@
     key_exist = 1
 
     if not user_key:
-        user_key_filename = '{}.{}.keyring'.format(cluster, user)
-        user_key_dir = '/etc/ceph'
+        user_key_filename = "{}.{}.keyring".format(cluster, user)
+        user_key_dir = "/etc/ceph"
         user_key_path = os.path.join(user_key_dir, user_key_filename)
     else:
         user_key_path = user_key
 
-    if (state in ["present", "update"]):
+    if state in ["present", "update"]:
         # if dest is not a directory, the user wants to change the file's name
         # (e,g: /etc/ceph/ceph.mgr.ceph-mon2.keyring)
         if not os.path.isdir(dest):
             file_path = dest
         else:
-            if 'bootstrap' in dest:
+            if "bootstrap" in dest:
                 # Build a different path for bootstrap keys as there are stored
                 # as /var/lib/ceph/bootstrap-rbd/ceph.keyring
-                keyring_filename = cluster + '.keyring'
+                keyring_filename = cluster + ".keyring"
             else:
                 keyring_filename = cluster + "." + name + ".keyring"
             file_path = os.path.join(dest, keyring_filename)
 
-        file_args['path'] = file_path
+        file_args["path"] = file_path
 
         if import_key:
             _info_key = []
             rc, cmd, out, err = exec_commands(
-                module, info_key(cluster, name, user, user_key_path, output_format, container_image))  # noqa: E501
+                module,
+                info_key(
+                    cluster, name, user, user_key_path, output_format, container_image
+                ),
+            )  # noqa: E501
             key_exist = rc
             if not caps and key_exist != 0:
-                fatal("Capabilities must be provided when state is 'present'", module)  # noqa: E501
+                fatal(
+                    "Capabilities must be provided when state is 'present'", module
+                )  # noqa: E501
             if key_exist != 0 and secret is None and caps is None:
-                fatal("Keyring doesn't exist, you must provide 'secret' and 'caps'", module)  # noqa: E501
+                fatal(
+                    "Keyring doesn't exist, you must provide 'secret' and 'caps'",
+                    module,
+                )  # noqa: E501
             if key_exist == 0:
                 _info_key = json.loads(out)
                 if not secret:
-                    secret = _info_key[0]['key']
-                _secret = _info_key[0]['key']
+                    secret = _info_key[0]["key"]
+                _secret = _info_key[0]["key"]
                 if not caps:
-                    caps = _info_key[0]['caps']
-                _caps = _info_key[0]['caps']
+                    caps = _info_key[0]["caps"]
+                _caps = _info_key[0]["caps"]
                 if secret == _secret and caps == _caps:
                     if not os.path.isfile(file_path):
-                        rc, cmd, out, err = exec_commands(module, get_key(cluster, user, user_key_path, name, file_path, container_image))  # noqa: E501
+                        rc, cmd, out, err = exec_commands(
+                            module,
+                            get_key(
+                                cluster,
+                                user,
+                                user_key_path,
+                                name,
+                                file_path,
+                                container_image,
+                            ),
+                        )  # noqa: E501
                         result["rc"] = rc
                         if rc != 0:
-                            result["stdout"] = "Couldn't fetch the key {0} at {1}.".format(name, file_path)  # noqa: E501
+                            result[
+                                "stdout"
+                            ] = "Couldn't fetch the key {0} at {1}.".format(
+                                name, file_path
+                            )  # noqa: E501
                             module.exit_json(**result)
-                        result["stdout"] = "fetched the key {0} at {1}.".format(name, file_path)  # noqa: E501
+                        result["stdout"] = "fetched the key {0} at {1}.".format(
+                            name, file_path
+                        )  # noqa: E501
 
-                    result["stdout"] = "{0} already exists and doesn't need to be updated.".format(name)  # noqa: E501
+                    result[
+                        "stdout"
+                    ] = "{0} already exists and doesn't need to be updated.".format(
+                        name
+                    )  # noqa: E501
                     result["rc"] = 0
                     module.set_fs_attributes_if_different(file_args, False)
                     module.exit_json(**result)
         else:
             if os.path.isfile(file_path) and not secret or not caps:
-                result["stdout"] = "{0} already exists in {1} you must provide secret *and* caps when import_key is {2}".format(name, dest, import_key)  # noqa: E501
+                result[
+                    "stdout"
+                ] = "{0} already exists in {1} you must provide secret *and* caps when import_key is {2}".format(
+                    name, dest, import_key
+                )  # noqa: E501
                 result["rc"] = 0
                 module.exit_json(**result)
-        if (key_exist == 0 and (secret != _secret or caps != _caps)) or key_exist != 0:  # noqa: E501
-            rc, cmd, out, err = exec_commands(module, create_key(
-                module, result, cluster, user, user_key_path, name, secret, caps, import_key, file_path, container_image))  # noqa: E501
+        if (
+            key_exist == 0 and (secret != _secret or caps != _caps)
+        ) or key_exist != 0:  # noqa: E501
+            rc, cmd, out, err = exec_commands(
+                module,
+                create_key(
+                    module,
+                    result,
+                    cluster,
+                    user,
+                    user_key_path,
+                    name,
+                    secret,
+                    caps,
+                    import_key,
+                    file_path,
+                    container_image,
+                ),
+            )  # noqa: E501
             if rc != 0:
                 result["stdout"] = "Couldn't create or update {0}".format(name)
                 result["stderr"] = err
@@ -603,7 +720,8 @@
     elif state == "absent":
         if key_exist == 0:
             rc, cmd, out, err = exec_commands(
-                module, delete_key(cluster, user, user_key_path, name, container_image))  # noqa: E501
+                module, delete_key(cluster, user, user_key_path, name, container_image)
+            )  # noqa: E501
             if rc == 0:
                 changed = True
         else:
@@ -611,23 +729,29 @@
 
     elif state == "info":
         rc, cmd, out, err = exec_commands(
-            module, info_key(cluster, name, user, user_key_path, output_format, container_image))  # noqa: E501
+            module,
+            info_key(
+                cluster, name, user, user_key_path, output_format, container_image
+            ),
+        )  # noqa: E501
 
     elif state == "list":
         rc, cmd, out, err = exec_commands(
-            module, list_keys(cluster, user, user_key_path, container_image))
+            module, list_keys(cluster, user, user_key_path, container_image)
+        )
 
     elif state == "fetch_initial_keys":
-        hostname = socket.gethostname().split('.', 1)[0]
+        hostname = socket.gethostname().split(".", 1)[0]
         user = "mon."
         keyring_filename = cluster + "-" + hostname + "/keyring"
         user_key_path = os.path.join("/var/lib/ceph/mon/", keyring_filename)
         rc, cmd, out, err = exec_commands(
-            module, list_keys(cluster, user, user_key_path, container_image))
+            module, list_keys(cluster, user, user_key_path, container_image)
+        )
         if rc != 0:
             result["stdout"] = "failed to retrieve ceph keys"
             result["sdterr"] = err
-            result['rc'] = 0
+            result["rc"] = 0
             module.exit_json(**result)
 
         entities = lookup_ceph_initial_entities(module, out)
@@ -643,25 +767,25 @@
                 continue
 
             extra_args = [
-                '-o',
+                "-o",
                 key_path,
             ]
 
-            info_cmd = info_key(cluster, entity, user,
-                                user_key_path, output_format, container_image)
+            info_cmd = info_key(
+                cluster, entity, user, user_key_path, output_format, container_image
+            )
             # we use info_cmd[0] because info_cmd is an array made of an array
             info_cmd[0].extend(extra_args)
-            rc, cmd, out, err = exec_commands(
-                module, info_cmd)  # noqa: E501
+            rc, cmd, out, err = exec_commands(module, info_cmd)  # noqa: E501
 
             file_args = module.load_file_common_arguments(module.params)
-            file_args['path'] = key_path
+            file_args["path"] = key_path
             module.set_fs_attributes_if_different(file_args, False)
     elif state == "generate_secret":
         out = generate_secret().decode()
-        cmd = ''
+        cmd = ""
         rc = 0
-        err = ''
+        err = ""
         changed = True
 
     endd = datetime.datetime.now()
@@ -679,7 +803,7 @@
     )
 
     if rc != 0:
-        module.fail_json(msg='non-zero return code', **result)
+        module.fail_json(msg="non-zero return code", **result)
 
     module.exit_json(**result)
 
@@ -688,5 +812,5 @@
     run_module()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     main()
diff --git a/plugins/modules/ceph_pool.py b/plugins/modules/ceph_pool.py
index ff91f76..1c125e0 100644
--- a/plugins/modules/ceph_pool.py
+++ b/plugins/modules/ceph_pool.py
@@ -15,27 +15,29 @@
 # limitations under the License.
 
 from __future__ import absolute_import, division, print_function
-__metaclass__ = type
 
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.vexxhost.atmosphere.plugins.module_utils.ca_common import generate_ceph_cmd, \
-    pre_generate_ceph_cmd, \
-    is_containerized, \
-    exec_command, \
-    exit_module
+__metaclass__ = type
 
 import datetime
 import json
 import os
 
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.vexxhost.atmosphere.plugins.module_utils.ca_common import (
+    exec_command,
+    exit_module,
+    generate_ceph_cmd,
+    is_containerized,
+    pre_generate_ceph_cmd,
+)
 
 ANSIBLE_METADATA = {
-    'metadata_version': '1.1',
-    'status': ['preview'],
-    'supported_by': 'community'
+    "metadata_version": "1.1",
+    "status": ["preview"],
+    "supported_by": "community",
 }
 
-DOCUMENTATION = '''
+DOCUMENTATION = """
 ---
 module: ceph_pool
 
@@ -122,9 +124,9 @@
             - Set the pool application on the pool.
         required: false
         default: None
-'''
+"""
 
-EXAMPLES = '''
+EXAMPLES = """
 
 pools:
   - { name: foo, size: 3, application: rbd, pool_type: 'replicated',
@@ -142,153 +144,146 @@
         pool_type: "{{ item.pool_type }}"
         pg_autoscale_mode: "{{ item.pg_autoscale_mode }}"
       with_items: "{{ pools }}"
-'''
+"""
 
-RETURN = '''#  '''
+RETURN = """#  """
 
 
-def check_pool_exist(cluster,
-                     name,
-                     user,
-                     user_key,
-                     output_format='json',
-                     container_image=None):
-    '''
+def check_pool_exist(
+    cluster, name, user, user_key, output_format="json", container_image=None
+):
+    """
     Check if a given pool exists
-    '''
+    """
 
-    args = ['stats', name, '-f', output_format]
+    args = ["stats", name, "-f", output_format]
 
-    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
-                            args=args,
-                            cluster=cluster,
-                            user=user,
-                            user_key=user_key,
-                            container_image=container_image)
+    cmd = generate_ceph_cmd(
+        sub_cmd=["osd", "pool"],
+        args=args,
+        cluster=cluster,
+        user=user,
+        user_key=user_key,
+        container_image=container_image,
+    )
 
     return cmd
 
 
-def generate_get_config_cmd(param,
-                            cluster,
-                            user,
-                            user_key,
-                            container_image=None):
+def generate_get_config_cmd(param, cluster, user, user_key, container_image=None):
     _cmd = pre_generate_ceph_cmd(container_image=container_image)
     args = [
-        '-n',
+        "-n",
         user,
-        '-k',
+        "-k",
         user_key,
-        '--cluster',
+        "--cluster",
         cluster,
-        'config',
-        'get',
-        'mon.*',
-        param
+        "config",
+        "get",
+        "mon.*",
+        param,
     ]
     cmd = _cmd + args
     return cmd
 
 
-def get_application_pool(cluster,
-                         name,
-                         user,
-                         user_key,
-                         output_format='json',
-                         container_image=None):
-    '''
+def get_application_pool(
+    cluster, name, user, user_key, output_format="json", container_image=None
+):
+    """
     Get application type enabled on a given pool
-    '''
+    """
 
-    args = ['application', 'get', name, '-f', output_format]
+    args = ["application", "get", name, "-f", output_format]
 
-    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
-                            args=args,
-                            cluster=cluster,
-                            user=user,
-                            user_key=user_key,
-                            container_image=container_image)
+    cmd = generate_ceph_cmd(
+        sub_cmd=["osd", "pool"],
+        args=args,
+        cluster=cluster,
+        user=user,
+        user_key=user_key,
+        container_image=container_image,
+    )
 
     return cmd
 
 
-def enable_application_pool(cluster,
-                            name,
-                            application,
-                            user,
-                            user_key,
-                            container_image=None):
-    '''
+def enable_application_pool(
+    cluster, name, application, user, user_key, container_image=None
+):
+    """
     Enable application on a given pool
-    '''
+    """
 
-    args = ['application', 'enable', name, application]
+    args = ["application", "enable", name, application]
 
-    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
-                            args=args,
-                            cluster=cluster,
-                            user=user,
-                            user_key=user_key,
-                            container_image=container_image)
+    cmd = generate_ceph_cmd(
+        sub_cmd=["osd", "pool"],
+        args=args,
+        cluster=cluster,
+        user=user,
+        user_key=user_key,
+        container_image=container_image,
+    )
 
     return cmd
 
 
-def disable_application_pool(cluster,
-                             name,
-                             application,
-                             user,
-                             user_key,
-                             container_image=None):
-    '''
+def disable_application_pool(
+    cluster, name, application, user, user_key, container_image=None
+):
+    """
     Disable application on a given pool
-    '''
+    """
 
-    args = ['application', 'disable', name,
-            application, '--yes-i-really-mean-it']
+    args = ["application", "disable", name, application, "--yes-i-really-mean-it"]
 
-    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
-                            args=args,
-                            cluster=cluster,
-                            user=user,
-                            user_key=user_key,
-                            container_image=container_image)
+    cmd = generate_ceph_cmd(
+        sub_cmd=["osd", "pool"],
+        args=args,
+        cluster=cluster,
+        user=user,
+        user_key=user_key,
+        container_image=container_image,
+    )
 
     return cmd
 
 
-def get_pool_details(module,
-                     cluster,
-                     name,
-                     user,
-                     user_key,
-                     output_format='json',
-                     container_image=None):
-    '''
+def get_pool_details(
+    module, cluster, name, user, user_key, output_format="json", container_image=None
+):
+    """
     Get details about a given pool
-    '''
+    """
 
-    args = ['ls', 'detail', '-f', output_format]
+    args = ["ls", "detail", "-f", output_format]
 
-    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
-                            args=args,
-                            cluster=cluster,
-                            user=user,
-                            user_key=user_key,
-                            container_image=container_image)
+    cmd = generate_ceph_cmd(
+        sub_cmd=["osd", "pool"],
+        args=args,
+        cluster=cluster,
+        user=user,
+        user_key=user_key,
+        container_image=container_image,
+    )
 
     rc, cmd, out, err = exec_command(module, cmd)
 
     if rc == 0:
-        out = [p for p in json.loads(out.strip()) if p['pool_name'] == name][0]
+        out = [p for p in json.loads(out.strip()) if p["pool_name"] == name][0]
 
-    _rc, _cmd, application_pool, _err = exec_command(module,
-                                                     get_application_pool(cluster,    # noqa: E501
-                                                                          name,    # noqa: E501
-                                                                          user,    # noqa: E501
-                                                                          user_key,    # noqa: E501
-                                                                          container_image=container_image))  # noqa: E501
+    _rc, _cmd, application_pool, _err = exec_command(
+        module,
+        get_application_pool(
+            cluster,  # noqa: E501
+            name,  # noqa: E501
+            user,  # noqa: E501
+            user_key,  # noqa: E501
+            container_image=container_image,
+        ),
+    )  # noqa: E501
 
     # This is a trick because "target_size_ratio" isn't present at the same
     # level in the dict
@@ -303,181 +298,231 @@
     # }
     # If 'target_size_ratio' is present in 'options', we set it, this way we
     # end up with a dict containing all needed keys at the same level.
-    if 'target_size_ratio' in out['options'].keys():
-        out['target_size_ratio'] = out['options']['target_size_ratio']
+    if "target_size_ratio" in out["options"].keys():
+        out["target_size_ratio"] = out["options"]["target_size_ratio"]
     else:
-        out['target_size_ratio'] = None
+        out["target_size_ratio"] = None
 
     application = list(json.loads(application_pool.strip()).keys())
 
     if len(application) == 0:
-        out['application'] = ''
+        out["application"] = ""
     else:
-        out['application'] = application[0]
+        out["application"] = application[0]
 
     return rc, cmd, out, err
 
 
 def compare_pool_config(user_pool_config, running_pool_details):
-    '''
+    """
     Compare user input config pool details with current running pool details
-    '''
+    """
 
     delta = {}
-    filter_keys = ['pg_num', 'pg_placement_num', 'size',
-                   'pg_autoscale_mode', 'target_size_ratio']
+    filter_keys = [
+        "pg_num",
+        "pg_placement_num",
+        "size",
+        "pg_autoscale_mode",
+        "target_size_ratio",
+    ]
     for key in filter_keys:
-        if (str(running_pool_details[key]) != user_pool_config[key]['value'] and  # noqa: E501
-                user_pool_config[key]['value']):
+        if (
+            str(running_pool_details[key]) != user_pool_config[key]["value"]
+            and user_pool_config[key]["value"]  # noqa: E501
+        ):
             delta[key] = user_pool_config[key]
 
-    if (running_pool_details['application'] !=
-            user_pool_config['application']['value'] and
-            user_pool_config['application']['value']):
-        delta['application'] = {}
-        delta['application']['new_application'] = user_pool_config['application']['value']  # noqa: E501
+    if (
+        running_pool_details["application"] != user_pool_config["application"]["value"]
+        and user_pool_config["application"]["value"]
+    ):
+        delta["application"] = {}
+        delta["application"]["new_application"] = user_pool_config["application"][
+            "value"
+        ]  # noqa: E501
         # to be improved (for update_pools()...)
-        delta['application']['value'] = delta['application']['new_application']
-        delta['application']['old_application'] = running_pool_details['application']  # noqa: E501
+        delta["application"]["value"] = delta["application"]["new_application"]
+        delta["application"]["old_application"] = running_pool_details[
+            "application"
+        ]  # noqa: E501
 
     return delta
 
 
-def list_pools(cluster,
-               user,
-               user_key,
-               details,
-               output_format='json',
-               container_image=None):
-    '''
+def list_pools(
+    cluster, user, user_key, details, output_format="json", container_image=None
+):
+    """
     List existing pools
-    '''
+    """
 
-    args = ['ls']
+    args = ["ls"]
 
     if details:
-        args.append('detail')
+        args.append("detail")
 
-    args.extend(['-f', output_format])
+    args.extend(["-f", output_format])
 
-    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
-                            args=args,
-                            cluster=cluster,
-                            user=user,
-                            user_key=user_key,
-                            container_image=container_image)
+    cmd = generate_ceph_cmd(
+        sub_cmd=["osd", "pool"],
+        args=args,
+        cluster=cluster,
+        user=user,
+        user_key=user_key,
+        container_image=container_image,
+    )
 
     return cmd
 
 
-def create_pool(cluster,
-                name,
-                user,
-                user_key,
-                user_pool_config,
-                container_image=None):
-    '''
+def create_pool(cluster, name, user, user_key, user_pool_config, container_image=None):
+    """
     Create a new pool
-    '''
+    """
 
-    args = ['create', user_pool_config['pool_name']['value'],
-            user_pool_config['type']['value']]
+    args = [
+        "create",
+        user_pool_config["pool_name"]["value"],
+        user_pool_config["type"]["value"],
+    ]
 
-    if user_pool_config['pg_autoscale_mode']['value'] != 'on':
-        args.extend(['--pg_num',
-                     user_pool_config['pg_num']['value'],
-                     '--pgp_num',
-                     user_pool_config['pgp_num']['value'] or
-                     user_pool_config['pg_num']['value']])
-    elif user_pool_config['target_size_ratio']['value']:
-        args.extend(['--target_size_ratio',
-                     user_pool_config['target_size_ratio']['value']])
+    if user_pool_config["pg_autoscale_mode"]["value"] != "on":
+        args.extend(
+            [
+                "--pg_num",
+                user_pool_config["pg_num"]["value"],
+                "--pgp_num",
+                user_pool_config["pgp_num"]["value"]
+                or user_pool_config["pg_num"]["value"],
+            ]
+        )
+    elif user_pool_config["target_size_ratio"]["value"]:
+        args.extend(
+            ["--target_size_ratio", user_pool_config["target_size_ratio"]["value"]]
+        )
 
-    if user_pool_config['type']['value'] == 'replicated':
-        args.extend([user_pool_config['crush_rule']['value'],
-                     '--expected_num_objects',
-                     user_pool_config['expected_num_objects']['value'],
-                     '--autoscale-mode',
-                     user_pool_config['pg_autoscale_mode']['value']])
+    if user_pool_config["type"]["value"] == "replicated":
+        args.extend(
+            [
+                user_pool_config["crush_rule"]["value"],
+                "--expected_num_objects",
+                user_pool_config["expected_num_objects"]["value"],
+                "--autoscale-mode",
+                user_pool_config["pg_autoscale_mode"]["value"],
+            ]
+        )
 
-    if (user_pool_config['size']['value'] and
-            user_pool_config['type']['value'] == "replicated"):
-        args.extend(['--size', user_pool_config['size']['value']])
+    if (
+        user_pool_config["size"]["value"]
+        and user_pool_config["type"]["value"] == "replicated"
+    ):
+        args.extend(["--size", user_pool_config["size"]["value"]])
 
-    elif user_pool_config['type']['value'] == 'erasure':
-        args.extend([user_pool_config['erasure_profile']['value']])
+    elif user_pool_config["type"]["value"] == "erasure":
+        args.extend([user_pool_config["erasure_profile"]["value"]])
 
-        if user_pool_config['crush_rule']['value']:
-            args.extend([user_pool_config['crush_rule']['value']])
+        if user_pool_config["crush_rule"]["value"]:
+            args.extend([user_pool_config["crush_rule"]["value"]])
 
-        args.extend(['--expected_num_objects',
-                     user_pool_config['expected_num_objects']['value'],
-                     '--autoscale-mode',
-                     user_pool_config['pg_autoscale_mode']['value']])
+        args.extend(
+            [
+                "--expected_num_objects",
+                user_pool_config["expected_num_objects"]["value"],
+                "--autoscale-mode",
+                user_pool_config["pg_autoscale_mode"]["value"],
+            ]
+        )
 
-    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
-                            args=args,
-                            cluster=cluster,
-                            user=user,
-                            user_key=user_key,
-                            container_image=container_image)
+    cmd = generate_ceph_cmd(
+        sub_cmd=["osd", "pool"],
+        args=args,
+        cluster=cluster,
+        user=user,
+        user_key=user_key,
+        container_image=container_image,
+    )
 
     return cmd
 
 
 def remove_pool(cluster, name, user, user_key, container_image=None):
-    '''
+    """
     Remove a pool
-    '''
+    """
 
-    args = ['rm', name, name, '--yes-i-really-really-mean-it']
+    args = ["rm", name, name, "--yes-i-really-really-mean-it"]
 
-    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
-                            args=args,
-                            cluster=cluster,
-                            user=user,
-                            user_key=user_key,
-                            container_image=container_image)
+    cmd = generate_ceph_cmd(
+        sub_cmd=["osd", "pool"],
+        args=args,
+        cluster=cluster,
+        user=user,
+        user_key=user_key,
+        container_image=container_image,
+    )
 
     return cmd
 
 
-def update_pool(module, cluster, name,
-                user, user_key, delta, container_image=None):
-    '''
+def update_pool(module, cluster, name, user, user_key, delta, container_image=None):
+    """
     Update an existing pool
-    '''
+    """
 
     report = ""
 
     for key in delta.keys():
-        if key != 'application':
-            args = ['set',
-                    name,
-                    delta[key]['cli_set_opt'],
-                    delta[key]['value']]
+        if key != "application":
+            args = ["set", name, delta[key]["cli_set_opt"], delta[key]["value"]]
 
-            cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
-                                    args=args,
-                                    cluster=cluster,
-                                    user=user,
-                                    user_key=user_key,
-                                    container_image=container_image)
+            cmd = generate_ceph_cmd(
+                sub_cmd=["osd", "pool"],
+                args=args,
+                cluster=cluster,
+                user=user,
+                user_key=user_key,
+                container_image=container_image,
+            )
 
             rc, cmd, out, err = exec_command(module, cmd)
             if rc != 0:
                 return rc, cmd, out, err
 
         else:
-            rc, cmd, out, err = exec_command(module, disable_application_pool(cluster, name, delta['application']['old_application'], user, user_key, container_image=container_image))  # noqa: E501
+            rc, cmd, out, err = exec_command(
+                module,
+                disable_application_pool(
+                    cluster,
+                    name,
+                    delta["application"]["old_application"],
+                    user,
+                    user_key,
+                    container_image=container_image,
+                ),
+            )  # noqa: E501
             if rc != 0:
                 return rc, cmd, out, err
 
-            rc, cmd, out, err = exec_command(module, enable_application_pool(cluster, name, delta['application']['new_application'], user, user_key, container_image=container_image))  # noqa: E501
+            rc, cmd, out, err = exec_command(
+                module,
+                enable_application_pool(
+                    cluster,
+                    name,
+                    delta["application"]["new_application"],
+                    user,
+                    user_key,
+                    container_image=container_image,
+                ),
+            )  # noqa: E501
             if rc != 0:
                 return rc, cmd, out, err
 
-        report = report + "\n" + "{} has been updated: {} is now {}".format(name, key, delta[key]['value'])  # noqa: E501
+        report = (
+            report
+            + "\n"
+            + "{} has been updated: {} is now {}".format(name, key, delta[key]["value"])
+        )  # noqa: E501
 
     out = report
     return rc, cmd, out, err
@@ -485,92 +530,99 @@
 
 def run_module():
     module_args = dict(
-        cluster=dict(type='str', required=False, default='ceph'),
-        name=dict(type='str', required=True),
-        state=dict(type='str', required=False, default='present',
-                   choices=['present', 'absent', 'list']),
-        details=dict(type='bool', required=False, default=False),
-        size=dict(type='str', required=False),
-        min_size=dict(type='str', required=False),
-        pg_num=dict(type='str', required=False),
-        pgp_num=dict(type='str', required=False),
-        pg_autoscale_mode=dict(type='str', required=False, default='on'),
-        target_size_ratio=dict(type='str', required=False, default=None),
-        pool_type=dict(type='str', required=False, default='replicated',
-                       choices=['replicated', 'erasure', '1', '3']),
-        erasure_profile=dict(type='str', required=False, default='default'),
-        rule_name=dict(type='str', required=False, default=None),
-        expected_num_objects=dict(type='str', required=False, default="0"),
-        application=dict(type='str', required=False, default=None),
+        cluster=dict(type="str", required=False, default="ceph"),
+        name=dict(type="str", required=True),
+        state=dict(
+            type="str",
+            required=False,
+            default="present",
+            choices=["present", "absent", "list"],
+        ),
+        details=dict(type="bool", required=False, default=False),
+        size=dict(type="str", required=False),
+        min_size=dict(type="str", required=False),
+        pg_num=dict(type="str", required=False),
+        pgp_num=dict(type="str", required=False),
+        pg_autoscale_mode=dict(type="str", required=False, default="on"),
+        target_size_ratio=dict(type="str", required=False, default=None),
+        pool_type=dict(
+            type="str",
+            required=False,
+            default="replicated",
+            choices=["replicated", "erasure", "1", "3"],
+        ),
+        erasure_profile=dict(type="str", required=False, default="default"),
+        rule_name=dict(type="str", required=False, default=None),
+        expected_num_objects=dict(type="str", required=False, default="0"),
+        application=dict(type="str", required=False, default=None),
     )
 
-    module = AnsibleModule(
-        argument_spec=module_args,
-        supports_check_mode=True
-    )
+    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)
 
     # Gather module parameters in variables
-    cluster = module.params.get('cluster')
-    name = module.params.get('name')
-    state = module.params.get('state')
-    details = module.params.get('details')
-    size = module.params.get('size')
-    min_size = module.params.get('min_size')
-    pg_num = module.params.get('pg_num')
-    pgp_num = module.params.get('pgp_num')
-    pg_autoscale_mode = module.params.get('pg_autoscale_mode')
-    target_size_ratio = module.params.get('target_size_ratio')
-    application = module.params.get('application')
+    cluster = module.params.get("cluster")
+    name = module.params.get("name")
+    state = module.params.get("state")
+    details = module.params.get("details")
+    size = module.params.get("size")
+    min_size = module.params.get("min_size")
+    pg_num = module.params.get("pg_num")
+    pgp_num = module.params.get("pgp_num")
+    pg_autoscale_mode = module.params.get("pg_autoscale_mode")
+    target_size_ratio = module.params.get("target_size_ratio")
+    application = module.params.get("application")
 
-    if (module.params.get('pg_autoscale_mode').lower() in
-            ['true', 'on', 'yes']):
-        pg_autoscale_mode = 'on'
-    elif (module.params.get('pg_autoscale_mode').lower() in
-          ['false', 'off', 'no']):
-        pg_autoscale_mode = 'off'
+    if module.params.get("pg_autoscale_mode").lower() in ["true", "on", "yes"]:
+        pg_autoscale_mode = "on"
+    elif module.params.get("pg_autoscale_mode").lower() in ["false", "off", "no"]:
+        pg_autoscale_mode = "off"
     else:
-        pg_autoscale_mode = 'warn'
+        pg_autoscale_mode = "warn"
 
-    if module.params.get('pool_type') == '1':
-        pool_type = 'replicated'
-    elif module.params.get('pool_type') == '3':
-        pool_type = 'erasure'
+    if module.params.get("pool_type") == "1":
+        pool_type = "replicated"
+    elif module.params.get("pool_type") == "3":
+        pool_type = "erasure"
     else:
-        pool_type = module.params.get('pool_type')
+        pool_type = module.params.get("pool_type")
 
-    if not module.params.get('rule_name'):
-        rule_name = 'replicated_rule' if pool_type == 'replicated' else None
+    if not module.params.get("rule_name"):
+        rule_name = "replicated_rule" if pool_type == "replicated" else None
     else:
-        rule_name = module.params.get('rule_name')
+        rule_name = module.params.get("rule_name")
 
-    erasure_profile = module.params.get('erasure_profile')
-    expected_num_objects = module.params.get('expected_num_objects')
+    erasure_profile = module.params.get("erasure_profile")
+    expected_num_objects = module.params.get("expected_num_objects")
     user_pool_config = {
-        'pool_name': {'value': name},
-        'pg_num': {'value': pg_num, 'cli_set_opt': 'pg_num'},
-        'pgp_num': {'value': pgp_num, 'cli_set_opt': 'pgp_num'},
-        'pg_autoscale_mode': {'value': pg_autoscale_mode,
-                              'cli_set_opt': 'pg_autoscale_mode'},
-        'target_size_ratio': {'value': target_size_ratio,
-                              'cli_set_opt': 'target_size_ratio'},
-        'application': {'value': application},
-        'type': {'value': pool_type},
-        'erasure_profile': {'value': erasure_profile},
-        'crush_rule': {'value': rule_name, 'cli_set_opt': 'crush_rule'},
-        'expected_num_objects': {'value': expected_num_objects},
-        'size': {'value': size, 'cli_set_opt': 'size'},
-        'min_size': {'value': min_size}
+        "pool_name": {"value": name},
+        "pg_num": {"value": pg_num, "cli_set_opt": "pg_num"},
+        "pgp_num": {"value": pgp_num, "cli_set_opt": "pgp_num"},
+        "pg_autoscale_mode": {
+            "value": pg_autoscale_mode,
+            "cli_set_opt": "pg_autoscale_mode",
+        },
+        "target_size_ratio": {
+            "value": target_size_ratio,
+            "cli_set_opt": "target_size_ratio",
+        },
+        "application": {"value": application},
+        "type": {"value": pool_type},
+        "erasure_profile": {"value": erasure_profile},
+        "crush_rule": {"value": rule_name, "cli_set_opt": "crush_rule"},
+        "expected_num_objects": {"value": expected_num_objects},
+        "size": {"value": size, "cli_set_opt": "size"},
+        "min_size": {"value": min_size},
     }
 
     if module.check_mode:
         module.exit_json(
             changed=False,
-            stdout='',
-            stderr='',
+            stdout="",
+            stderr="",
             rc=0,
-            start='',
-            end='',
-            delta='',
+            start="",
+            end="",
+            delta="",
         )
 
     startd = datetime.datetime.now()
@@ -580,105 +632,120 @@
     container_image = is_containerized()
 
     user = "client.admin"
-    keyring_filename = cluster + '.' + user + '.keyring'
+    keyring_filename = cluster + "." + user + ".keyring"
     user_key = os.path.join("/etc/ceph/", keyring_filename)
 
     if state == "present":
-        rc, cmd, out, err = exec_command(module,
-                                         check_pool_exist(cluster,
-                                                          name,
-                                                          user,
-                                                          user_key,
-                                                          container_image=container_image))  # noqa: E501
+        rc, cmd, out, err = exec_command(
+            module,
+            check_pool_exist(
+                cluster, name, user, user_key, container_image=container_image
+            ),
+        )  # noqa: E501
         if rc == 0:
-            running_pool_details = get_pool_details(module,
-                                                    cluster,
-                                                    name,
-                                                    user,
-                                                    user_key,
-                                                    container_image=container_image)  # noqa: E501
-            user_pool_config['pg_placement_num'] = {'value': str(running_pool_details[2]['pg_placement_num']), 'cli_set_opt': 'pgp_num'}  # noqa: E501
-            delta = compare_pool_config(user_pool_config,
-                                        running_pool_details[2])
+            running_pool_details = get_pool_details(
+                module, cluster, name, user, user_key, container_image=container_image
+            )  # noqa: E501
+            user_pool_config["pg_placement_num"] = {
+                "value": str(running_pool_details[2]["pg_placement_num"]),
+                "cli_set_opt": "pgp_num",
+            }  # noqa: E501
+            delta = compare_pool_config(user_pool_config, running_pool_details[2])
             if len(delta) > 0:
                 keys = list(delta.keys())
                 details = running_pool_details[2]
-                if details['erasure_code_profile'] and 'size' in keys:
-                    del delta['size']
-                if details['pg_autoscale_mode'] == 'on':
-                    delta.pop('pg_num', None)
-                    delta.pop('pgp_num', None)
+                if details["erasure_code_profile"] and "size" in keys:
+                    del delta["size"]
+                if details["pg_autoscale_mode"] == "on":
+                    delta.pop("pg_num", None)
+                    delta.pop("pgp_num", None)
 
                 if len(delta) == 0:
-                    out = "Skipping pool {}.\nUpdating either 'size' on an erasure-coded pool or 'pg_num'/'pgp_num' on a pg autoscaled pool is incompatible".format(name)  # noqa: E501
+                    out = "Skipping pool {}.\nUpdating either 'size' on an erasure-coded pool or 'pg_num'/'pgp_num' on a pg autoscaled pool is incompatible".format(
+                        name
+                    )  # noqa: E501
                 else:
-                    rc, cmd, out, err = update_pool(module,
-                                                    cluster,
-                                                    name,
-                                                    user,
-                                                    user_key,
-                                                    delta,
-                                                    container_image=container_image)  # noqa: E501
+                    rc, cmd, out, err = update_pool(
+                        module,
+                        cluster,
+                        name,
+                        user,
+                        user_key,
+                        delta,
+                        container_image=container_image,
+                    )  # noqa: E501
                     if rc == 0:
                         changed = True
             else:
-                out = "Pool {} already exists and there is nothing to update.".format(name)  # noqa: E501
+                out = "Pool {} already exists and there is nothing to update.".format(
+                    name
+                )  # noqa: E501
         else:
-            rc, cmd, out, err = exec_command(module,
-                                             create_pool(cluster,
-                                                         name,
-                                                         user,
-                                                         user_key,
-                                                         user_pool_config=user_pool_config,  # noqa: E501
-                                                         container_image=container_image))  # noqa: E501
-            if user_pool_config['application']['value']:
-                rc, _, _, _ = exec_command(module,
-                                           enable_application_pool(cluster,
-                                                                   name,
-                                                                   user_pool_config['application']['value'],  # noqa: E501
-                                                                   user,
-                                                                   user_key,
-                                                                   container_image=container_image))  # noqa: E501
-            if user_pool_config['min_size']['value']:
+            rc, cmd, out, err = exec_command(
+                module,
+                create_pool(
+                    cluster,
+                    name,
+                    user,
+                    user_key,
+                    user_pool_config=user_pool_config,  # noqa: E501
+                    container_image=container_image,
+                ),
+            )  # noqa: E501
+            if user_pool_config["application"]["value"]:
+                rc, _, _, _ = exec_command(
+                    module,
+                    enable_application_pool(
+                        cluster,
+                        name,
+                        user_pool_config["application"]["value"],  # noqa: E501
+                        user,
+                        user_key,
+                        container_image=container_image,
+                    ),
+                )  # noqa: E501
+            if user_pool_config["min_size"]["value"]:
                 # not implemented yet
                 pass
             changed = True
 
     elif state == "list":
-        rc, cmd, out, err = exec_command(module,
-                                         list_pools(cluster,
-                                                    name, user,
-                                                    user_key,
-                                                    details,
-                                                    container_image=container_image))  # noqa: E501
+        rc, cmd, out, err = exec_command(
+            module,
+            list_pools(
+                cluster, name, user, user_key, details, container_image=container_image
+            ),
+        )  # noqa: E501
         if rc != 0:
             out = "Couldn't list pool(s) present on the cluster"
 
     elif state == "absent":
-        rc, cmd, out, err = exec_command(module,
-                                         check_pool_exist(cluster,
-                                                          name, user,
-                                                          user_key,
-                                                          container_image=container_image))  # noqa: E501
+        rc, cmd, out, err = exec_command(
+            module,
+            check_pool_exist(
+                cluster, name, user, user_key, container_image=container_image
+            ),
+        )  # noqa: E501
         if rc == 0:
-            rc, cmd, out, err = exec_command(module,
-                                             remove_pool(cluster,
-                                                         name,
-                                                         user,
-                                                         user_key,
-                                                         container_image=container_image))  # noqa: E501
+            rc, cmd, out, err = exec_command(
+                module,
+                remove_pool(
+                    cluster, name, user, user_key, container_image=container_image
+                ),
+            )  # noqa: E501
             changed = True
         else:
             rc = 0
             out = "Skipped, since pool {} doesn't exist".format(name)
 
-    exit_module(module=module, out=out, rc=rc, cmd=cmd, err=err, startd=startd,
-                changed=changed)
+    exit_module(
+        module=module, out=out, rc=rc, cmd=cmd, err=err, startd=startd, changed=changed
+    )
 
 
 def main():
     run_module()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     main()
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..5d7bf33
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,2 @@
+[tool.isort]
+profile = "black"
diff --git a/releasenotes/notes/add-ansible-lint-c1e961c2fb88dbc7.yaml b/releasenotes/notes/add-ansible-lint-c1e961c2fb88dbc7.yaml
index f5de6cc..59b1793 100644
--- a/releasenotes/notes/add-ansible-lint-c1e961c2fb88dbc7.yaml
+++ b/releasenotes/notes/add-ansible-lint-c1e961c2fb88dbc7.yaml
@@ -1,3 +1,3 @@
 ---
 features:
-  - Added ``ansible-lint`` to all of the playbooks and roles.
\ No newline at end of file
+  - Added ``ansible-lint`` to all of the playbooks and roles.
diff --git a/releasenotes/notes/add-molecule-customization-9feb3a6a6e6d85f2.yaml b/releasenotes/notes/add-molecule-customization-9feb3a6a6e6d85f2.yaml
index 3f4d7af..1bb4118 100644
--- a/releasenotes/notes/add-molecule-customization-9feb3a6a6e6d85f2.yaml
+++ b/releasenotes/notes/add-molecule-customization-9feb3a6a6e6d85f2.yaml
@@ -2,4 +2,4 @@
 features:
   - Added the ability to customize the Heat stack properties
 fixes:
-  - Added notes on working around Molecule bug.
\ No newline at end of file
+  - Added notes on working around Molecule bug.
diff --git a/releasenotes/notes/add-openstack-exporter-role-f87a6a6f90a0f236.yaml b/releasenotes/notes/add-openstack-exporter-role-f87a6a6f90a0f236.yaml
index 78c5ee9..4c08505 100644
--- a/releasenotes/notes/add-openstack-exporter-role-f87a6a6f90a0f236.yaml
+++ b/releasenotes/notes/add-openstack-exporter-role-f87a6a6f90a0f236.yaml
@@ -1,3 +1,3 @@
 ---
 features:
-  - Added ``openstack-exporter`` with alertings.
\ No newline at end of file
+  - Added ``openstack-exporter`` with alertings.
diff --git a/releasenotes/notes/add-promote-job-079c3c57f1b5e272.yaml b/releasenotes/notes/add-promote-job-079c3c57f1b5e272.yaml
index 626a321..0bdb8f0 100644
--- a/releasenotes/notes/add-promote-job-079c3c57f1b5e272.yaml
+++ b/releasenotes/notes/add-promote-job-079c3c57f1b5e272.yaml
@@ -1,4 +1,4 @@
 ---
 features:
   - Add jobs to promote the generated artifact to the tarballs server in order
-    to make it easy to pull in latest version.
\ No newline at end of file
+    to make it easy to pull in latest version.
diff --git a/releasenotes/notes/add-wheel-builds-e731c5a64f98964b.yaml b/releasenotes/notes/add-wheel-builds-e731c5a64f98964b.yaml
index 5d11c4f..4acf240 100644
--- a/releasenotes/notes/add-wheel-builds-e731c5a64f98964b.yaml
+++ b/releasenotes/notes/add-wheel-builds-e731c5a64f98964b.yaml
@@ -1,3 +1,3 @@
 ---
 features:
-  - Added Zuul jobs for building wheels and publishing them
\ No newline at end of file
+  - Added Zuul jobs for building wheels and publishing them
diff --git a/releasenotes/notes/add-workspace-generation-8ff28781216beccd.yaml b/releasenotes/notes/add-workspace-generation-8ff28781216beccd.yaml
index a4780e5..8f4ade7 100644
--- a/releasenotes/notes/add-workspace-generation-8ff28781216beccd.yaml
+++ b/releasenotes/notes/add-workspace-generation-8ff28781216beccd.yaml
@@ -1,4 +1,4 @@
 ---
 features:
   - Added playbook to allow for generating workspace for deployment and
-    integrate it into Molecule in order to make sure we always test it.
\ No newline at end of file
+    integrate it into Molecule in order to make sure we always test it.
diff --git a/releasenotes/notes/added-role-docs-e7203e2b3db04f9f.yaml b/releasenotes/notes/added-role-docs-e7203e2b3db04f9f.yaml
index ecade5f..066acef 100644
--- a/releasenotes/notes/added-role-docs-e7203e2b3db04f9f.yaml
+++ b/releasenotes/notes/added-role-docs-e7203e2b3db04f9f.yaml
@@ -1,3 +1,3 @@
 ---
 other:
-  - Added basic documentation infrastructure.
\ No newline at end of file
+  - Added basic documentation infrastructure.
diff --git a/releasenotes/notes/correct_nova_timeout-111d1967cacf02dc.yaml b/releasenotes/notes/correct_nova_timeout-111d1967cacf02dc.yaml
index 360426e..b620b50 100644
--- a/releasenotes/notes/correct_nova_timeout-111d1967cacf02dc.yaml
+++ b/releasenotes/notes/correct_nova_timeout-111d1967cacf02dc.yaml
@@ -1,3 +1,2 @@
 ---
 fixes: Correct the Nova timeout
-
diff --git a/releasenotes/notes/create-cloud-resources-dd6b1441b047fe98.yaml b/releasenotes/notes/create-cloud-resources-dd6b1441b047fe98.yaml
index e0bc21f..9f7e2fe 100644
--- a/releasenotes/notes/create-cloud-resources-dd6b1441b047fe98.yaml
+++ b/releasenotes/notes/create-cloud-resources-dd6b1441b047fe98.yaml
@@ -1,3 +1,3 @@
 ---
 features:
-  - Create cloud resources such as networks and flavors
\ No newline at end of file
+  - Create cloud resources such as networks and flavors
diff --git a/releasenotes/notes/fix-ceph-csi-monmap-89505192fb838958.yaml b/releasenotes/notes/fix-ceph-csi-monmap-89505192fb838958.yaml
index e3f87ea..d165dc0 100644
--- a/releasenotes/notes/fix-ceph-csi-monmap-89505192fb838958.yaml
+++ b/releasenotes/notes/fix-ceph-csi-monmap-89505192fb838958.yaml
@@ -2,8 +2,6 @@
 feature:
   - |
     When we have ceph public network running on a
-    separate network, we should dump the correct 
-    monitor ip addresses in order to ceph csi to be 
+    separate network, we should dump the correct
+    monitor ip addresses in order to ceph csi to be
     able to talk to ceph cluster and provision pvcs.
-
-
diff --git a/releasenotes/notes/fix-git-mirrors-af8cec9540a12842.yaml b/releasenotes/notes/fix-git-mirrors-af8cec9540a12842.yaml
index 6955ba8..9b285be 100644
--- a/releasenotes/notes/fix-git-mirrors-af8cec9540a12842.yaml
+++ b/releasenotes/notes/fix-git-mirrors-af8cec9540a12842.yaml
@@ -1,3 +1,3 @@
 ---
 fixes:
-  - The GitHub mirroring job was not included to run so this patch fixes that.
\ No newline at end of file
+  - The GitHub mirroring job was not included to run so this patch fixes that.
diff --git a/releasenotes/notes/fix-ipmi-exporter-3099bb1397c884d4.yaml b/releasenotes/notes/fix-ipmi-exporter-3099bb1397c884d4.yaml
index b21a50f..a6556af 100644
--- a/releasenotes/notes/fix-ipmi-exporter-3099bb1397c884d4.yaml
+++ b/releasenotes/notes/fix-ipmi-exporter-3099bb1397c884d4.yaml
@@ -3,4 +3,4 @@
   - The IPMI exporter depended on the `ipmi` module being loaded, however, it
     is the case that the module could be loaded on a virtual machine. This
     patch instead only runs it on systems that don't expose the ``HYPERVISOR``
-    flag.
\ No newline at end of file
+    flag.
diff --git a/releasenotes/notes/fix-semver-0aa05baa8ecdb2b0.yaml b/releasenotes/notes/fix-semver-0aa05baa8ecdb2b0.yaml
index 3414941..812184f 100644
--- a/releasenotes/notes/fix-semver-0aa05baa8ecdb2b0.yaml
+++ b/releasenotes/notes/fix-semver-0aa05baa8ecdb2b0.yaml
@@ -1,4 +1,4 @@
 ---
 fixes:
   - Fix ``pbr`` version os the ``.devN`` part to be ``-N`` instead to have
-    proper semantic versioning.
\ No newline at end of file
+    proper semantic versioning.
diff --git a/releasenotes/notes/fix-senlin-username-a8a238893e806d8d.yaml b/releasenotes/notes/fix-senlin-username-a8a238893e806d8d.yaml
index 1c2b7a8..16488bf 100644
--- a/releasenotes/notes/fix-senlin-username-a8a238893e806d8d.yaml
+++ b/releasenotes/notes/fix-senlin-username-a8a238893e806d8d.yaml
@@ -2,4 +2,4 @@
 fixes:
   - |
     Fixes senlin username which was wrongly pointing to cinder, causing
-    authentication issues to volume service.
\ No newline at end of file
+    authentication issues to volume service.
diff --git a/releasenotes/notes/fix_osd_mon_hosts-aa7bd5fa08241131.yaml b/releasenotes/notes/fix_osd_mon_hosts-aa7bd5fa08241131.yaml
index 5b718d6..d6d3b20 100644
--- a/releasenotes/notes/fix_osd_mon_hosts-aa7bd5fa08241131.yaml
+++ b/releasenotes/notes/fix_osd_mon_hosts-aa7bd5fa08241131.yaml
@@ -3,4 +3,4 @@
   - |
     Since we define the monmap based on the
     ceph public network, we should build ceph.conf
-    for osd with the correct ip addresses.
\ No newline at end of file
+    for osd with the correct ip addresses.
diff --git a/releasenotes/notes/ingress-add-variable-for-annotations-b824db994ead135b.yaml b/releasenotes/notes/ingress-add-variable-for-annotations-b824db994ead135b.yaml
index 9277962..4e39c12 100644
--- a/releasenotes/notes/ingress-add-variable-for-annotations-b824db994ead135b.yaml
+++ b/releasenotes/notes/ingress-add-variable-for-annotations-b824db994ead135b.yaml
@@ -1,8 +1,8 @@
 ---
 features:
   - |
-    Add ansible variables for ingress annotations for roles consuming 
-    openstack_helm_ingress role 
+    Add ansible variables for ingress annotations for roles consuming
+    openstack_helm_ingress role
 
       - openstack_helm_barbican
       - openstack_helm_cinder
diff --git a/releasenotes/notes/lookup-ceph-public-iface-e9147f1615e8371b.yaml b/releasenotes/notes/lookup-ceph-public-iface-e9147f1615e8371b.yaml
index 636f265..ac8af8c 100644
--- a/releasenotes/notes/lookup-ceph-public-iface-e9147f1615e8371b.yaml
+++ b/releasenotes/notes/lookup-ceph-public-iface-e9147f1615e8371b.yaml
@@ -3,4 +3,4 @@
   - |
     Add the ability to lookup for the ip address of the
     ceph public network. This is useful when the ceph public
-    network is differnet from the default network on the system.
\ No newline at end of file
+    network is differnet from the default network on the system.
diff --git a/releasenotes/notes/use-symbolic-link-for-adm-cfg-94f57076773d7864.yaml b/releasenotes/notes/use-symbolic-link-for-adm-cfg-94f57076773d7864.yaml
index 2e3d646..69cbddd 100644
--- a/releasenotes/notes/use-symbolic-link-for-adm-cfg-94f57076773d7864.yaml
+++ b/releasenotes/notes/use-symbolic-link-for-adm-cfg-94f57076773d7864.yaml
@@ -4,4 +4,3 @@
     Use symbolic link for kube admin config, instead of copy and maintain
     two identical file. `/root/.kube/config` is now a symbolic link of file
     `/etc/kubernetes/admin.conf`. This will prevent any unsync file issue.
-
diff --git a/roles/ceph_repository/templates/apt-preferences.j2 b/roles/ceph_repository/templates/apt-preferences.j2
index 91d6b11..c197476 100644
--- a/roles/ceph_repository/templates/apt-preferences.j2
+++ b/roles/ceph_repository/templates/apt-preferences.j2
@@ -8,4 +8,4 @@
 
 Package: ceph-osd
 Pin: version {{ ceph_repository_version }}-*
-Pin-Priority: 1000
\ No newline at end of file
+Pin-Priority: 1000
diff --git a/roles/containerd/templates/config.toml.j2 b/roles/containerd/templates/config.toml.j2
index 4ce5d20..84cad6d 100644
--- a/roles/containerd/templates/config.toml.j2
+++ b/roles/containerd/templates/config.toml.j2
@@ -2,4 +2,4 @@
 
 [plugins]
   [plugins."io.containerd.grpc.v1.cri"]
-    sandbox_image = "{{ containerd_pause_image }}"
\ No newline at end of file
+    sandbox_image = "{{ containerd_pause_image }}"
diff --git a/roles/kubernetes/templates/apt-preferences.j2 b/roles/kubernetes/templates/apt-preferences.j2
index 494a3a8..aad283b 100644
--- a/roles/kubernetes/templates/apt-preferences.j2
+++ b/roles/kubernetes/templates/apt-preferences.j2
@@ -8,4 +8,4 @@
 
 Package: kubelet
 Pin: version {{ kubernetes_version }}-00
-Pin-Priority: 1000
\ No newline at end of file
+Pin-Priority: 1000
diff --git a/roles/kubernetes/templates/check_apiserver.sh.j2 b/roles/kubernetes/templates/check_apiserver.sh.j2
index bc9aa95..5d81310 100644
--- a/roles/kubernetes/templates/check_apiserver.sh.j2
+++ b/roles/kubernetes/templates/check_apiserver.sh.j2
@@ -8,4 +8,4 @@
 curl --silent --max-time 2 --insecure https://localhost:16443/ -o /dev/null || errorExit "Error GET https://localhost:16443/"
 if ip addr | grep -q {{ kubernetes_keepalived_vip }}; then
     curl --silent --max-time 2 --insecure https://{{ kubernetes_keepalived_vip }}:6443/ -o /dev/null || errorExit "Error GET https://{{ kubernetes_keepalived_vip }}:6443/"
-fi
\ No newline at end of file
+fi
diff --git a/roles/kubernetes/templates/keepalived.conf.j2 b/roles/kubernetes/templates/keepalived.conf.j2
index 58fde31..7efe465 100644
--- a/roles/kubernetes/templates/keepalived.conf.j2
+++ b/roles/kubernetes/templates/keepalived.conf.j2
@@ -22,4 +22,4 @@
     track_script {
         check_apiserver
     }
-}
\ No newline at end of file
+}
diff --git a/roles/kubernetes/templates/kubeadm.yaml.j2 b/roles/kubernetes/templates/kubeadm.yaml.j2
index 5ef4829..e12280b 100644
--- a/roles/kubernetes/templates/kubeadm.yaml.j2
+++ b/roles/kubernetes/templates/kubeadm.yaml.j2
@@ -56,4 +56,4 @@
 ---
 apiVersion: kubeproxy.config.k8s.io/v1alpha1
 kind: KubeProxyConfiguration
-metricsBindAddress: 0.0.0.0
\ No newline at end of file
+metricsBindAddress: 0.0.0.0
diff --git a/roles/kubernetes/templates/modules-load.conf.j2 b/roles/kubernetes/templates/modules-load.conf.j2
index 2c4d984..351a663 100644
--- a/roles/kubernetes/templates/modules-load.conf.j2
+++ b/roles/kubernetes/templates/modules-load.conf.j2
@@ -1,3 +1,3 @@
 {% for kubernetes_kernel_module in kubernetes_kernel_modules %}
 {{ kubernetes_kernel_module }}
-{% endfor %}
\ No newline at end of file
+{% endfor %}
diff --git a/roles/openstack_cli/templates/openrc.j2 b/roles/openstack_cli/templates/openrc.j2
index 7b56e0f..ba230f4 100644
--- a/roles/openstack_cli/templates/openrc.j2
+++ b/roles/openstack_cli/templates/openrc.j2
@@ -9,4 +9,4 @@
 export OS_USERNAME="{{ openstack_helm_endpoints['identity']['auth']['admin']['username'] }}"
 export OS_PASSWORD="{{ openstack_helm_endpoints['identity']['auth']['admin']['password'] }}"
 export OS_PROJECT_DOMAIN_NAME=Default
-export OS_PROJECT_NAME=admin
\ No newline at end of file
+export OS_PROJECT_NAME=admin
diff --git a/roles/openstack_helm_horizon/files/50-monasca-ui-settings.py b/roles/openstack_helm_horizon/files/50-monasca-ui-settings.py
index 28b4a99..1171a8e 100644
--- a/roles/openstack_helm_horizon/files/50-monasca-ui-settings.py
+++ b/roles/openstack_helm_horizon/files/50-monasca-ui-settings.py
@@ -3,54 +3,49 @@
 
 # Service group names (global across all projects):
 MONITORING_SERVICES_GROUPS = [
-    {'name': _('OpenStack Services'), 'groupBy': 'service'},
-    {'name': _('Servers'), 'groupBy': 'hostname'}
+    {"name": _("OpenStack Services"), "groupBy": "service"},
+    {"name": _("Servers"), "groupBy": "hostname"},
 ]
 
 # Services being monitored
 MONITORING_SERVICES = getattr(
-    settings,
-    'MONITORING_SERVICES_GROUPS',
-    MONITORING_SERVICES_GROUPS
+    settings, "MONITORING_SERVICES_GROUPS", MONITORING_SERVICES_GROUPS
 )
 
-MONITORING_SERVICE_VERSION = getattr(
-    settings, 'MONITORING_SERVICE_VERSION', '2_0'
-)
-MONITORING_SERVICE_TYPE = getattr(
-    settings, 'MONITORING_SERVICE_TYPE', 'monitoring'
-)
+MONITORING_SERVICE_VERSION = getattr(settings, "MONITORING_SERVICE_VERSION", "2_0")
+MONITORING_SERVICE_TYPE = getattr(settings, "MONITORING_SERVICE_TYPE", "monitoring")
 MONITORING_ENDPOINT_TYPE = getattr(
     # NOTE(trebskit) # will default to OPENSTACK_ENDPOINT_TYPE
-    settings, 'MONITORING_ENDPOINT_TYPE', None
+    settings,
+    "MONITORING_ENDPOINT_TYPE",
+    None,
 )
 
 # Grafana button titles/file names (global across all projects):
 # GRAFANA_LINKS = [{"raw": True, "path": "monasca-dashboard", "title": "Sub page1"}]
 GRAFANA_LINKS = []
-DASHBOARDS = getattr(settings, 'GRAFANA_LINKS', GRAFANA_LINKS)
+DASHBOARDS = getattr(settings, "GRAFANA_LINKS", GRAFANA_LINKS)
 
 GRAFANA_URL = {"regionOne": "/grafana"}
 
-SHOW_GRAFANA_HOME = getattr(settings, 'SHOW_GRAFANA_HOME', True)
+SHOW_GRAFANA_HOME = getattr(settings, "SHOW_GRAFANA_HOME", True)
 
-ENABLE_LOG_MANAGEMENT_BUTTON = getattr(
-    settings, 'ENABLE_LOG_MANAGEMENT_BUTTON', False)
+ENABLE_LOG_MANAGEMENT_BUTTON = getattr(settings, "ENABLE_LOG_MANAGEMENT_BUTTON", False)
 ENABLE_EVENT_MANAGEMENT_BUTTON = getattr(
-    settings, 'ENABLE_EVENT_MANAGEMENT_BUTTON', False)
+    settings, "ENABLE_EVENT_MANAGEMENT_BUTTON", False
+)
 
-KIBANA_POLICY_RULE = getattr(settings, 'KIBANA_POLICY_RULE',
-                             'monitoring:kibana_access')
-KIBANA_POLICY_SCOPE = getattr(settings, 'KIBANA_POLICY_SCOPE',
-                              'monitoring')
-KIBANA_HOST = getattr(settings, 'KIBANA_HOST',
-                      'http://192.168.10.6:5601/')
+KIBANA_POLICY_RULE = getattr(settings, "KIBANA_POLICY_RULE", "monitoring:kibana_access")
+KIBANA_POLICY_SCOPE = getattr(settings, "KIBANA_POLICY_SCOPE", "monitoring")
+KIBANA_HOST = getattr(settings, "KIBANA_HOST", "http://192.168.10.6:5601/")
 
-OPENSTACK_SSL_NO_VERIFY = getattr(
-    settings, 'OPENSTACK_SSL_NO_VERIFY', False)
-OPENSTACK_SSL_CACERT = getattr(
-    settings, 'OPENSTACK_SSL_CACERT', None)
+OPENSTACK_SSL_NO_VERIFY = getattr(settings, "OPENSTACK_SSL_NO_VERIFY", False)
+OPENSTACK_SSL_CACERT = getattr(settings, "OPENSTACK_SSL_CACERT", None)
 
-POLICY_FILES = getattr(settings, 'POLICY_FILES', {})
-POLICY_FILES.update({'monitoring': 'monitoring_policy.json', })  # noqa
-setattr(settings, 'POLICY_FILES', POLICY_FILES)
+POLICY_FILES = getattr(settings, "POLICY_FILES", {})
+POLICY_FILES.update(
+    {
+        "monitoring": "monitoring_policy.json",
+    }
+)  # noqa
+setattr(settings, "POLICY_FILES", POLICY_FILES)