diff --git a/ansible/roles/ceph/defaults/main.yml b/ansible/roles/ceph/defaults/main.yml
index a4b9ab47b4..456cf43560 100644
--- a/ansible/roles/ceph/defaults/main.yml
+++ b/ansible/roles/ceph/defaults/main.yml
@@ -29,7 +29,7 @@ swift_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ rgw_p
 swift_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ rgw_port }}/swift/v1"
 swift_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ rgw_port }}/swift/v1"
 
-openstack_swift_auth: "{'auth_url':'{{ openstack_auth.auth_url }}','username':'{{ openstack_auth.username }}','password':'{{ openstack_auth.password }}','project_name':'{{ openstack_auth.project_name }}','domain_name':'default'}"
+openstack_swift_auth: "{{ openstack_auth }}"
 
 ####################
 # Kolla
diff --git a/ansible/roles/ceph/tasks/start_rgw_keystone.yml b/ansible/roles/ceph/tasks/start_rgw_keystone.yml
index 3df489c8b3..7560d2fe1e 100644
--- a/ansible/roles/ceph/tasks/start_rgw_keystone.yml
+++ b/ansible/roles/ceph/tasks/start_rgw_keystone.yml
@@ -4,22 +4,19 @@
   when: enable_swift | bool
 
 - name: Creating the Swift service and endpoint
-  command: docker exec -t kolla_toolbox /usr/bin/ansible localhost
-    -m kolla_keystone_service
-    -a "service_name=swift
-        service_type=object-store
-        description='Openstack Object Storage'
-        endpoint_region={{ openstack_region_name }}
-        url='{{ item.url }}'
-        interface='{{ item.interface }}'
-        region_name={{ openstack_region_name }}
-        auth={{ '{{ openstack_swift_auth }}' }}"
-    -e "{'openstack_swift_auth':{{ openstack_swift_auth }}}"
-  register: swift_endpoint
-  changed_when: "{{ swift_endpoint.stdout.find('localhost | SUCCESS => ') != -1 and (swift_endpoint.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
-  until: swift_endpoint.stdout.split()[2] == 'SUCCESS'
-  retries: 10
-  delay: 5
+  kolla_toolbox:
+    module_name: kolla_keystone_service
+    module_args:
+      service_name: "swift"
+      service_type: "object-store"
+      description: "Openstack Object Storage"
+      endpoint_region: "{{ openstack_region_name }}"
+      url: "{{ item.url }}"
+      interface: "{{ item.interface }}"
+      region_name: "{{ openstack_region_name }}"
+      auth: "{{ '{{ openstack_swift_auth }}' }}"
+    module_extra_args:
+      openstack_swift_auth: "{{ openstack_swift_auth }}"
   run_once: True
   with_items:
     - {'interface': 'admin', 'url': '{{ swift_admin_endpoint }}'}
diff --git a/ansible/roles/karbor/tasks/bootstrap.yml b/ansible/roles/karbor/tasks/bootstrap.yml
index 8c36eedd3d..7742655b3d 100644
--- a/ansible/roles/karbor/tasks/bootstrap.yml
+++ b/ansible/roles/karbor/tasks/bootstrap.yml
@@ -1,41 +1,32 @@
 ---
 - name: Creating Karbor database
-  command: docker exec -t kolla_toolbox /usr/bin/ansible localhost
-    -m mysql_db
-    -a "login_host='{{ database_address }}'
-        login_port='{{ database_port }}'
-        login_user='{{ database_user }}'
-        login_password='{{ database_password }}'
-        name='{{ karbor_database_name }}'"
+  kolla_toolbox:
+    module_name: mysql_db
+    module_args:
+      login_host: "{{ database_address }}"
+      login_port: "{{ database_port }}"
+      login_user: "{{ database_user }}"
+      login_password: "{{ database_password }}"
+      name: "{{ karbor_database_name }}"
   register: database
-  changed_when: "{{ database.stdout.find('localhost | SUCCESS => ') != -1 and
-                    (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
-  failed_when: database.stdout.split()[2] != 'SUCCESS'
   run_once: True
   delegate_to: "{{ groups['karbor-api'][0] }}"
 
-- name: Reading json from variable
-  set_fact:
-    database_created: "{{ (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
-
 - name: Creating Karbor database user and setting permissions
-  command: docker exec -t kolla_toolbox /usr/bin/ansible localhost
-    -m mysql_user
-    -a "login_host='{{ database_address }}'
-        login_port='{{ database_port }}'
-        login_user='{{ database_user }}'
-        login_password='{{ database_password }}'
-        name='{{ karbor_database_name }}'
-        password='{{ karbor_database_password }}'
-        host='%'
-        priv='{{ karbor_database_name }}.*:ALL'
-        append_privs='yes'"
-  register: database_user_create
-  changed_when: "{{ database_user_create.stdout.find('localhost | SUCCESS => ') != -1 and
-                    (database_user_create.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
-  failed_when: database_user_create.stdout.split()[2] != 'SUCCESS'
+  kolla_toolbox:
+    module_name: mysql_user
+    module_args:
+      login_host: "{{ database_address }}"
+      login_port: "{{ database_port }}"
+      login_user: "{{ database_user }}"
+      login_password: "{{ database_password }}"
+      name: "{{ karbor_database_name }}"
+      password: "{{ karbor_database_password }}"
+      host: "%"
+      priv: "{{ karbor_database_name }}.*:ALL"
+      append_privs: "yes"
   run_once: True
   delegate_to: "{{ groups['karbor-api'][0] }}"
 
 - include: bootstrap_service.yml
-  when: database_created
+  when: database | changed
diff --git a/ansible/roles/mariadb/tasks/register.yml b/ansible/roles/mariadb/tasks/register.yml
index bd9a3e7c88..0a23518047 100644
--- a/ansible/roles/mariadb/tasks/register.yml
+++ b/ansible/roles/mariadb/tasks/register.yml
@@ -1,20 +1,17 @@
 ---
 - name: Creating haproxy mysql user
-  command: docker exec -t kolla_toolbox /usr/bin/ansible localhost
-    -m mysql_user
-    -a "login_host='{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}'
-        login_port='{{ mariadb_port }}'
-        login_user='{{ database_user }}'
-        login_password='{{ database_password }}'
-        name='haproxy'
-        password=''
-        host='%'
-        priv=*.*:USAGE"
-  register: haproxy_user
-  changed_when: "{{ haproxy_user.stdout.find('localhost | SUCCESS => ') != -1 and (haproxy_user.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
-  until: haproxy_user.stdout.split()[2] == 'SUCCESS'
-  retries: 10
-  delay: 5
+  kolla_toolbox:
+    module_name: mysql_user
+    module_args:
+      login_host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
+      login_port: "{{ mariadb_port }}"
+      login_user: "{{ database_user }}"
+      login_password: "{{ database_password }}"
+      name: "haproxy"
+      password: ""
+      host: "%"
+      priv: "*.*:USAGE"
+  run_once: True
 
 - name: Cleaning up facts
   set_fact: