diff --git a/ansible-collections-requirements.yml b/ansible-collections-requirements.yml
new file mode 100644
index 0000000..12bf5c7
--- /dev/null
+++ b/ansible-collections-requirements.yml
@@ -0,0 +1,11 @@
+collections:
+  - containers.podman
+  # - community.general
+  # Until community.general release is out use latest from git
+  - name: https://github.com/ansible-collections/community.general
+    type: git
+    version: main
+  - community.docker
+  - ansible.posix
+  - ansible.netcommon
+  - openstack.cloud
diff --git a/ansible-requirements.txt b/ansible-requirements.txt
index 4676e4a..09661ad 100644
--- a/ansible-requirements.txt
+++ b/ansible-requirements.txt
@@ -1 +1 @@
-ansible>=2.8, <2.10.0
+ansible-core>=2.11,<2.12.0
diff --git a/molecule-requirements.txt b/molecule-requirements.txt
index ad1e363..8b84339 100644
--- a/molecule-requirements.txt
+++ b/molecule-requirements.txt
@@ -1,4 +1,5 @@
-ansible>=2.8, <2.10.0
+ansible-core>=2.11,<2.12.0
 docker
-molecule>=3.0,<3.1
+molecule
+molecule-docker
 testinfra
diff --git a/test-requirements.txt b/test-requirements.txt
index 64f45bf..7522d11 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -7,3 +7,4 @@ pre-commit # MIT
 mock>=2.0.0 # BSD
 stestr>=2.0.0 # Apache-2.0
 oslotest>=3.2.0 # Apache-2.0
+yamllint
diff --git a/tox.ini b/tox.ini
index 30b5652..6c18d67 100644
--- a/tox.ini
+++ b/tox.ini
@@ -7,19 +7,20 @@ skipdist = True
 
 [testenv]
 usedevelop = True
-install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt} {opts} {packages}
+install_command = pip install {opts} {packages}
 passenv = *
 sitepackages = True
 deps =
    -r {toxinidir}/requirements.txt
    -r {toxinidir}/ansible-requirements.txt
    -r {toxinidir}/test-requirements.txt
-commands = stestr run {posargs}
+commands =
+    ansible-galaxy install -fr {toxinidir}/ansible-collections-requirements.yml
+    stestr run {posargs}
 whitelist_externals =
   tox
 
 [testenv:molecule]
-install_command = pip install {opts} {packages}
 setenv =
   ANSIBLE_FILTER_PLUGINS={toxinidir}/tripleo_ipa/ansible_plugins/filter
   ANSIBLE_LIBRARY={toxinidir}/tripleo_ipa/roles.galaxy/config_template/library:{toxinidir}/tripleo_ipa/ansible_plugins/modules
diff --git a/tripleo_ipa/ansible_plugins/modules/cleanup_ipa_services.py b/tripleo_ipa/ansible_plugins/modules/cleanup_ipa_services.py
index e54d348..e25c909 100644
--- a/tripleo_ipa/ansible_plugins/modules/cleanup_ipa_services.py
+++ b/tripleo_ipa/ansible_plugins/modules/cleanup_ipa_services.py
@@ -40,8 +40,8 @@ except ImportError:
     from ipalib.install.kinit import kinit_keytab
 
 from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.openstack import openstack_full_argument_spec
-from ansible.module_utils.openstack import openstack_module_kwargs
+from ansible_collections.openstack.cloud.plugins.module_utils.openstack import openstack_full_argument_spec
+from ansible_collections.openstack.cloud.plugins.module_utils.openstack import openstack_module_kwargs
 
 ANSIBLE_METADATA = {
     'metadata_version': '1.0',
diff --git a/tripleo_ipa/molecule/default/prepare.yml b/tripleo_ipa/molecule/default/prepare.yml
index fa4ee35..ab450d8 100644
--- a/tripleo_ipa/molecule/default/prepare.yml
+++ b/tripleo_ipa/molecule/default/prepare.yml
@@ -23,29 +23,29 @@
         ipa_password: password123
 
     - name: Download FreeIPA Container
-      docker_image:
+      community.docker.docker_image:
         name: freeipa/freeipa-server:fedora-28
         source: pull
 
     - name: Make IPA data dir
-      file:
+      ansible.builtin.file:
         path: /tmp/ipa-data
         state: directory
 
     - name: Toggle SELinux boolean
-      seboolean:
+      ansible.posix.seboolean:
         name: container_manage_cgroup
         state: true
         persistent: true
       become: true
 
     - name: Remove any old IPA container
-      docker_container:
+      community.docker.docker_container:
         name: freeipa-server-container
         state: absent
 
     - name: Create network
-      docker_network:
+      community.docker.docker_network:
         name: ipa_network
         ipam_config:
           - subnet: 172.18.0.0/16
@@ -90,4 +90,4 @@
 
     - name: Print ipactl status
       debug:
-        msg: "{{result.stdout}}"
+        msg: "{{ result.stdout }}"
diff --git a/tripleo_ipa/molecule/deregister/converge.yml b/tripleo_ipa/molecule/deregister/converge.yml
index 5a3bb7d..81cdd6d 100644
--- a/tripleo_ipa/molecule/deregister/converge.yml
+++ b/tripleo_ipa/molecule/deregister/converge.yml
@@ -26,7 +26,7 @@
   tasks:
     - name: copy requirements file
       copy:
-        src: "{{playbook_dir}}/../../../requirements.txt"
+        src: "{{ playbook_dir }}/../../../requirements.txt"
         dest: /tmp/requirements.txt
     - name: install requirements
       pip:
@@ -271,7 +271,8 @@
   vars:
     ipa_server_hostname: ipa.example.test
   tasks:
-    - include_role:
+    - name: Include IPA Cleanup
+      include_role:
         name: tripleo_ipa_cleanup
       vars:
         tripleo_ipa_hosts_to_delete: ['test-1.example.test']
diff --git a/tripleo_ipa/molecule/deregister/prepare.yml b/tripleo_ipa/molecule/deregister/prepare.yml
index 8cac5b3..e98bc77 100644
--- a/tripleo_ipa/molecule/deregister/prepare.yml
+++ b/tripleo_ipa/molecule/deregister/prepare.yml
@@ -23,29 +23,29 @@
         ipa_password: password123
 
     - name: Download FreeIPA Container
-      docker_image:
+      community.docker.docker_image:
         name: freeipa/freeipa-server:fedora-28
         source: pull
 
     - name: Make IPA data dir
-      file:
+      ansible.builtin.file:
         path: /tmp/ipa-data
         state: directory
 
     - name: Toggle SELinux boolean
-      seboolean:
+      ansible.posix.seboolean:
         name: container_manage_cgroup
         state: true
         persistent: true
       become: true
 
     - name: Remove any old IPA container
-      docker_container:
+      community.docker.docker_container:
         name: freeipa-server-container
         state: absent
 
     - name: Create network
-      docker_network:
+      community.docker.docker_network:
         name: ipa_network
         ipam_config:
           - subnet: 172.18.0.0/16
diff --git a/tripleo_ipa/playbooks/cli-cleanup-ipa.yml b/tripleo_ipa/playbooks/cli-cleanup-ipa.yml
index abe28cc..a6c1457 100644
--- a/tripleo_ipa/playbooks/cli-cleanup-ipa.yml
+++ b/tripleo_ipa/playbooks/cli-cleanup-ipa.yml
@@ -35,7 +35,8 @@
 
     - name: End play if undercloud is not an ipa client
       meta: end_host
-      when: default_conf_stat.stat.exists == False
+      when:
+        - not default_conf_stat.stat.exists
 
     - name: Get realm and host and keytab
       set_fact:
@@ -48,7 +49,8 @@
 
     - name: End play if the keytab does not exist
       meta: end_host
-      when: ipa_keytab_stat.stat.exists == False
+      when:
+        - not ipa_keytab_stat.stat.exists
 
   tasks:
     - name: initialize the list of hosts to clean up
diff --git a/tripleo_ipa/playbooks/ipa-server-create-principal.yaml b/tripleo_ipa/playbooks/ipa-server-create-principal.yaml
index 463c81b..3632fd5 100644
--- a/tripleo_ipa/playbooks/ipa-server-create-principal.yaml
+++ b/tripleo_ipa/playbooks/ipa-server-create-principal.yaml
@@ -42,7 +42,7 @@
       set_fact:
         ipa_principal: "{{ tripleo_ipa_principal | default(lookup('env', 'IPA_PRINCIPAL')) }}"
         ipa_password: "{{ tripleo_ipa_password | default(lookup('env', 'IPA_PASSWORD')) }}"
-        undercloud_fqdn: "{{ tripleo_undercloud_fqdn | default(lookup('env', 'UNDERCLOUD_FQDN'))}}"
+        undercloud_fqdn: "{{ tripleo_undercloud_fqdn | default(lookup('env', 'UNDERCLOUD_FQDN')) }}"
 
     - name: set nova service user facts
       set_fact:
diff --git a/tripleo_ipa/playbooks/undercloud-ipa-install.yaml b/tripleo_ipa/playbooks/undercloud-ipa-install.yaml
index 40076a4..4102501 100644
--- a/tripleo_ipa/playbooks/undercloud-ipa-install.yaml
+++ b/tripleo_ipa/playbooks/undercloud-ipa-install.yaml
@@ -83,13 +83,15 @@
 - hosts: ipaclients
   become: true
   tasks:
-    - include_role:
+    - name: Include ipaclient role
+      include_role:
         name: ipaclient
 
 - hosts: "{{ tripleo_ipa_undercloud_host | default('localhost') }}"
   become: true
   tasks:
-    - include_role:
+    - name: Include create admin roles
+      include_role:
         name: "{{ item }}"
       with_first_found:
         - "/usr/share/ansible/roles/tripleo_create_admin"
diff --git a/tripleo_ipa/roles/tripleo_ipa_cleanup/meta/main.yml b/tripleo_ipa/roles/tripleo_ipa_cleanup/meta/main.yml
index 5255118..926029f 100644
--- a/tripleo_ipa/roles/tripleo_ipa_cleanup/meta/main.yml
+++ b/tripleo_ipa/roles/tripleo_ipa_cleanup/meta/main.yml
@@ -16,6 +16,7 @@
 
 
 galaxy_info:
+  namespace: openstack
   author: OpenStack
   description: TripleO OpenStack Role -- tripleo_ipa_cleanup
   company: Red Hat
diff --git a/tripleo_ipa/roles/tripleo_ipa_dns/meta/main.yml b/tripleo_ipa/roles/tripleo_ipa_dns/meta/main.yml
index 53c0186..01c4fff 100644
--- a/tripleo_ipa/roles/tripleo_ipa_dns/meta/main.yml
+++ b/tripleo_ipa/roles/tripleo_ipa_dns/meta/main.yml
@@ -16,6 +16,7 @@
 
 
 galaxy_info:
+  namespace: openstack
   author: OpenStack
   description: TripleO OpenStack Role -- tripleo_ipa_dns
   company: Red Hat
diff --git a/tripleo_ipa/roles/tripleo_ipa_dns/tasks/dns.yaml b/tripleo_ipa/roles/tripleo_ipa_dns/tasks/dns.yaml
index 3b46881..6cdab89 100644
--- a/tripleo_ipa/roles/tripleo_ipa_dns/tasks/dns.yaml
+++ b/tripleo_ipa/roles/tripleo_ipa_dns/tasks/dns.yaml
@@ -40,7 +40,7 @@
   block:
     - name: set record type
       set_fact:
-        record_type: "{{ 'A' if record_value| ipv4 else 'AAAA' }}"
+        record_type: "{{ 'A' if record_value| ansible.netcommon.ipv4 else 'AAAA' }}"
 
     - name: add dns zone
       ipa_dnszone:
diff --git a/tripleo_ipa/roles/tripleo_ipa_registration/meta/main.yml b/tripleo_ipa/roles/tripleo_ipa_registration/meta/main.yml
index 5e60245..f5c3999 100644
--- a/tripleo_ipa/roles/tripleo_ipa_registration/meta/main.yml
+++ b/tripleo_ipa/roles/tripleo_ipa_registration/meta/main.yml
@@ -16,6 +16,7 @@
 
 
 galaxy_info:
+  namespace: openstack
   author: OpenStack
   description: TripleO OpenStack Role -- tripleo_ipa_registration
   company: Red Hat
diff --git a/tripleo_ipa/roles/tripleo_ipa_registration/tasks/main.yml b/tripleo_ipa/roles/tripleo_ipa_registration/tasks/main.yml
index f3b8c7b..b17d294 100644
--- a/tripleo_ipa/roles/tripleo_ipa_registration/tasks/main.yml
+++ b/tripleo_ipa/roles/tripleo_ipa_registration/tasks/main.yml
@@ -56,7 +56,8 @@
       changed_when: false
       failed_when: false
 
-    - debug: var=host_raw_data
+    - name: Print debug data
+      debug: var=host_raw_data
 
     - name: confirm that host is not already registered with current keytab
       when: '"has_keytab: TRUE" not in host_raw_data.stdout'
diff --git a/tripleo_ipa/roles/tripleo_ipa_setup/meta/main.yml b/tripleo_ipa/roles/tripleo_ipa_setup/meta/main.yml
index d7a5d03..ba423de 100644
--- a/tripleo_ipa/roles/tripleo_ipa_setup/meta/main.yml
+++ b/tripleo_ipa/roles/tripleo_ipa_setup/meta/main.yml
@@ -16,6 +16,7 @@
 
 
 galaxy_info:
+  namespace: openstack
   author: OpenStack
   description: TripleO-IPA Role -- tripleo_ipa_setup
   company: Red Hat
diff --git a/zuul.d/base.yaml b/zuul.d/base.yaml
index f4da58f..b3f4e4f 100644
--- a/zuul.d/base.yaml
+++ b/zuul.d/base.yaml
@@ -2,7 +2,7 @@
 - job:
     description: tripleo-ipa molecule job
     name: tripleo-ipa-centos-8-molecule
-    nodeset: centos-8
+    nodeset: centos-8-stream
     parent: base
     success-url: "reports.html"
     failure-url: "reports.html"