diff --git a/kayobe/cli/commands.py b/kayobe/cli/commands.py
index 1ed1af3595b2bd77c32492121090cc1c441bfb4b..92d3082757e79289b7aef0a1083fd17f3432fc72 100644
--- a/kayobe/cli/commands.py
+++ b/kayobe/cli/commands.py
@@ -1268,6 +1268,10 @@ class OvercloudDatabaseBackup(KollaAnsibleMixin, KayobeAnsibleMixin,
 
     def take_action(self, parsed_args):
         self.app.LOG.debug("Performing overcloud database backup")
+
+        # First prepare configuration.
+        self.generate_kolla_ansible_config(parsed_args, service_config=False)
+
         extra_args = []
         if parsed_args.incremental:
             extra_args.append('--incremental')
@@ -1292,6 +1296,10 @@ class OvercloudDatabaseRecover(KollaAnsibleMixin, KayobeAnsibleMixin,
     def take_action(self, parsed_args):
         self.app.LOG.debug("Performing overcloud database recovery")
         extra_vars = {}
+
+        # First prepare configuration.
+        self.generate_kolla_ansible_config(parsed_args, service_config=True)
+
         if parsed_args.force_recovery_host:
             extra_vars['mariadb_recover_inventory_name'] = (
                 parsed_args.force_recovery_host)
diff --git a/kayobe/tests/unit/cli/test_commands.py b/kayobe/tests/unit/cli/test_commands.py
index 1164a2096971822f99cff37103ff92ea30da64bc..ab61ddd90e554a8c8ecb2720cf3e01cd1a5e9491 100644
--- a/kayobe/tests/unit/cli/test_commands.py
+++ b/kayobe/tests/unit/cli/test_commands.py
@@ -1480,14 +1480,27 @@ class TestCase(unittest.TestCase):
         ]
         self.assertEqual(expected_calls, mock_kolla_run.call_args_list)
 
+    @mock.patch.object(commands.KayobeAnsibleMixin,
+                       "run_kayobe_playbooks")
     @mock.patch.object(commands.KollaAnsibleMixin,
                        "run_kolla_ansible_overcloud")
-    def test_overcloud_database_backup(self, mock_run):
+    def test_overcloud_database_backup(self, mock_kolla_run, mock_run):
         command = commands.OvercloudDatabaseBackup(TestApp(), [])
         parser = command.get_parser("test")
         parsed_args = parser.parse_args([])
         result = command.run(parsed_args)
         self.assertEqual(0, result)
+
+        expected_calls = [
+            mock.call(
+                mock.ANY,
+                [utils.get_data_files_path("ansible", "kolla-ansible.yml")],
+                tags="config",
+                ignore_limit=True,
+            ),
+        ]
+        self.assertEqual(expected_calls, mock_run.call_args_list)
+
         expected_calls = [
             mock.call(
                 mock.ANY,
@@ -1495,16 +1508,30 @@ class TestCase(unittest.TestCase):
                 extra_args=[]
             ),
         ]
-        self.assertEqual(expected_calls, mock_run.call_args_list)
+        self.assertEqual(expected_calls, mock_kolla_run.call_args_list)
 
+    @mock.patch.object(commands.KayobeAnsibleMixin,
+                       "run_kayobe_playbooks")
     @mock.patch.object(commands.KollaAnsibleMixin,
                        "run_kolla_ansible_overcloud")
-    def test_overcloud_database_backup_incremental(self, mock_run):
+    def test_overcloud_database_backup_incremental(self, mock_kolla_run,
+                                                   mock_run):
         command = commands.OvercloudDatabaseBackup(TestApp(), [])
         parser = command.get_parser("test")
         parsed_args = parser.parse_args(["--incremental"])
         result = command.run(parsed_args)
         self.assertEqual(0, result)
+
+        expected_calls = [
+            mock.call(
+                mock.ANY,
+                [utils.get_data_files_path("ansible", "kolla-ansible.yml")],
+                tags="config",
+                ignore_limit=True,
+            ),
+        ]
+        self.assertEqual(expected_calls, mock_run.call_args_list)
+
         expected_calls = [
             mock.call(
                 mock.ANY,
@@ -1512,16 +1539,37 @@ class TestCase(unittest.TestCase):
                 extra_args=["--incremental"]
             ),
         ]
-        self.assertEqual(expected_calls, mock_run.call_args_list)
+        self.assertEqual(expected_calls, mock_kolla_run.call_args_list)
 
+    @mock.patch.object(commands.KayobeAnsibleMixin,
+                       "run_kayobe_playbooks")
     @mock.patch.object(commands.KollaAnsibleMixin,
                        "run_kolla_ansible_overcloud")
-    def test_overcloud_database_recover(self, mock_run):
+    def test_overcloud_database_recover(self, mock_kolla_run, mock_run):
         command = commands.OvercloudDatabaseRecover(TestApp(), [])
         parser = command.get_parser("test")
         parsed_args = parser.parse_args([])
         result = command.run(parsed_args)
         self.assertEqual(0, result)
+
+        expected_calls = [
+            mock.call(
+                mock.ANY,
+                [utils.get_data_files_path("ansible", "kolla-ansible.yml")],
+                tags="config",
+                ignore_limit=True,
+            ),
+            mock.call(
+                mock.ANY,
+                [
+                    utils.get_data_files_path("ansible",
+                                              "kolla-openstack.yml"),
+                ],
+                ignore_limit=True,
+            ),
+        ]
+        self.assertEqual(expected_calls, mock_run.call_args_list)
+
         expected_calls = [
             mock.call(
                 mock.ANY,
@@ -1529,16 +1577,38 @@ class TestCase(unittest.TestCase):
                 extra_vars={}
             ),
         ]
-        self.assertEqual(expected_calls, mock_run.call_args_list)
+        self.assertEqual(expected_calls, mock_kolla_run.call_args_list)
 
+    @mock.patch.object(commands.KayobeAnsibleMixin,
+                       "run_kayobe_playbooks")
     @mock.patch.object(commands.KollaAnsibleMixin,
                        "run_kolla_ansible_overcloud")
-    def test_overcloud_database_recover_force_host(self, mock_run):
+    def test_overcloud_database_recover_force_host(self, mock_kolla_run,
+                                                   mock_run):
         command = commands.OvercloudDatabaseRecover(TestApp(), [])
         parser = command.get_parser("test")
         parsed_args = parser.parse_args(["--force-recovery-host", "foo"])
         result = command.run(parsed_args)
         self.assertEqual(0, result)
+
+        expected_calls = [
+            mock.call(
+                mock.ANY,
+                [utils.get_data_files_path("ansible", "kolla-ansible.yml")],
+                tags="config",
+                ignore_limit=True,
+            ),
+            mock.call(
+                mock.ANY,
+                [
+                    utils.get_data_files_path("ansible",
+                                              "kolla-openstack.yml"),
+                ],
+                ignore_limit=True,
+            ),
+        ]
+        self.assertEqual(expected_calls, mock_run.call_args_list)
+
         expected_calls = [
             mock.call(
                 mock.ANY,
@@ -1548,7 +1618,7 @@ class TestCase(unittest.TestCase):
                 }
             ),
         ]
-        self.assertEqual(expected_calls, mock_run.call_args_list)
+        self.assertEqual(expected_calls, mock_kolla_run.call_args_list)
 
     @mock.patch.object(commands.KayobeAnsibleMixin,
                        "run_kayobe_playbooks")
diff --git a/releasenotes/notes/fix-overcloud-database-backup-with-no-kolla-config-4f857915adabad41.yaml b/releasenotes/notes/fix-overcloud-database-backup-with-no-kolla-config-4f857915adabad41.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..55652e54ff80fbd952dabf28e4674a585ee5316f
--- /dev/null
+++ b/releasenotes/notes/fix-overcloud-database-backup-with-no-kolla-config-4f857915adabad41.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    The set of commands starting with ``kayobe overcloud database`` now
+    generate the kolla configuration necessary to login to the nodes
+    running the database.