test: add aio tests (#318)

* test: add aio tests

* ci: fix runs-on node

* ci: add tmate

* Tmate after converge

* Run destroy always

* Disable ipv6 in runner

* Fix permission for ipv6 disable

* disable ipv6 permanently

* Fix sysctl configuration

* Fix typo

* ci: test disable_ipv6

* ci: use focal node

* ci: add aio inside gha

* wip: aio

* ci: fix become for prepare

* ci: add ceph bootstrap

* ci: add ceph backend

* ci: fix ceph + use bigger node

* ci: fix ci for aio

* ci: increase number of cores

* Set virt_type as qemu

* Fix nic name in auto bridge add

* Disable auto bridge add in molecule aio

* ci: run full suite with eth1

* ci: fix molecule command

* ci: clean-up more values

* ci: use correct ip

* ci: use correct keepalived interface

* Fix glance_images

* fix ceph_mon_config_overrides keys and set mon_max_pg_per_osd as 500

* Enable fact gathering in tempest playbook

* Use other address for ceph_public_network and reduce image upload

- 10.0.0.0/22 is confused with cilium network. So mon ip is catched from cilium host nic in idempotence.

* fix(ceph-provisioners): stop depending on ceph-csi-rbd

* fix: allow for hci label adding

* fix: add ceph scenario

* ci: enable nested virt

* ci: final cleanup

---------

Co-authored-by: okozachenko1203 <okozachenko1203@users.noreply.github.com>
diff --git a/molecule/ceph/converge.yml b/molecule/ceph/converge.yml
new file mode 100644
index 0000000..fc75f20
--- /dev/null
+++ b/molecule/ceph/converge.yml
@@ -0,0 +1,65 @@
+# Copyright (c) 2023 VEXXHOST, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+- ansible.builtin.import_playbook: vexxhost.ceph.site
+- ansible.builtin.import_playbook: vexxhost.atmosphere.kubernetes
+
+# NOTE(mnaser): When using Docker with custom networks, it will use 127.0.0.11
+#               as the DNS server which trips up the CoreDNS "loop" plugin.
+- name: Switch CoreDNS to use CloudFlare DNS
+  hosts: controllers[0]
+  become: true
+  tasks:
+    - name: Update CoreDNS ConfigMap
+      kubernetes.core.k8s:
+        state: present
+        definition:
+          apiVersion: v1
+          kind: ConfigMap
+          metadata:
+            name: coredns
+            namespace: kube-system
+          data:
+            Corefile: |
+              .:53 {
+                  errors
+                  health {
+                    lameduck 5s
+                  }
+                  ready
+                  kubernetes cluster.local in-addr.arpa ip6.arpa {
+                    pods insecure
+                    fallthrough in-addr.arpa ip6.arpa
+                    ttl 30
+                  }
+                  prometheus :9153
+                  forward . 1.1.1.1 {
+                    max_concurrent 1000
+                  }
+                  cache 30
+                  loop
+                  reload
+                  loadbalance
+              }
+      notify:
+        - Rollout CoreDNS
+        - Wait for CoreDNS to be ready
+  handlers:
+    - name: Rollout CoreDNS
+      command: kubectl -n kube-system rollout restart deploy/coredns
+    - name: Wait for CoreDNS to be ready
+      command: kubectl -n kube-system rollout status deploy/coredns
+
+- ansible.builtin.import_playbook: vexxhost.atmosphere.csi
+- ansible.builtin.import_playbook: vexxhost.atmosphere.openstack