ci: add full-node tests (#920)

diff --git a/playbooks/generate_workspace.yml b/playbooks/generate_workspace.yml
index 3df0c4a..0b11184 100644
--- a/playbooks/generate_workspace.yml
+++ b/playbooks/generate_workspace.yml
@@ -168,7 +168,6 @@
 
 - name: Generate endpoints for workspace
   hosts: localhost
-  gather_facts: false
   vars:
     _endpoints_path: "{{ workspace_path }}/group_vars/all/endpoints.yml"
     # Input variables
diff --git a/playbooks/infrastructure.yml b/playbooks/infrastructure.yml
new file mode 100644
index 0000000..db62f05
--- /dev/null
+++ b/playbooks/infrastructure.yml
@@ -0,0 +1,49 @@
+# Copyright (c) 2024 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.
+
+- name: Deploy Infrastructure
+  hosts: controllers[0]
+  become: true
+  roles:
+    - role: cert_manager
+      tags:
+        - cert-manager
+
+    - role: cluster_issuer
+      tags:
+        - cluster-issuer
+
+    - role: ingress_nginx
+      tags:
+        - ingress-nginx
+
+    - role: rabbitmq_cluster_operator
+      tags:
+        - rabbitmq-cluster-operator
+
+    - role: percona_xtradb_cluster_operator
+      tags:
+        - percona-xtradb-cluster-operator
+
+    - role: percona_xtradb_cluster
+      tags:
+        - percona-xtradb-cluster
+
+    - role: keycloak
+      tags:
+        - keycloak
+
+    - role: keepalived
+      tags:
+        - keepalived
diff --git a/playbooks/monitoring.yml b/playbooks/monitoring.yml
new file mode 100644
index 0000000..c5249b9
--- /dev/null
+++ b/playbooks/monitoring.yml
@@ -0,0 +1,41 @@
+# Copyright (c) 2024 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.
+
+- name: Deploy Monitoring
+  hosts: controllers[0]
+  become: true
+  roles:
+    - role: node_feature_discovery
+      tags:
+        - node-feature-discovery
+
+    - role: kube_prometheus_stack
+      tags:
+        - kube-prometheus-stack
+
+    - role: loki
+      tags:
+        - loki
+
+    - role: vector
+      tags:
+        - vector
+
+    - role: ipmi_exporter
+      tags:
+        - ipmi-exporter
+
+    - role: prometheus_pushgateway
+      tags:
+        - prometheus-pushgateway
diff --git a/playbooks/openstack.yml b/playbooks/openstack.yml
index 5f3827b..be3cc7c 100644
--- a/playbooks/openstack.yml
+++ b/playbooks/openstack.yml
@@ -12,65 +12,10 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
-- hosts: controllers[0]
+- name: Deploy OpenStack
+  hosts: controllers[0]
   become: true
   roles:
-    - role: cert_manager
-      tags:
-        - cert-manager
-
-    - role: cluster_issuer
-      tags:
-        - cluster-issuer
-
-    - role: ingress_nginx
-      tags:
-        - ingress-nginx
-
-    - role: rabbitmq_cluster_operator
-      tags:
-        - rabbitmq-cluster-operator
-
-    - role: percona_xtradb_cluster_operator
-      tags:
-        - percona-xtradb-cluster-operator
-
-    - role: percona_xtradb_cluster
-      tags:
-        - percona-xtradb-cluster
-
-    - role: keycloak
-      tags:
-        - keycloak
-
-    - role: node_feature_discovery
-      tags:
-        - node-feature-discovery
-
-    - role: kube_prometheus_stack
-      tags:
-        - kube-prometheus-stack
-
-    - role: loki
-      tags:
-        - loki
-
-    - role: vector
-      tags:
-        - vector
-
-    - role: ipmi_exporter
-      tags:
-        - ipmi-exporter
-
-    - role: prometheus_pushgateway
-      tags:
-        - prometheus-pushgateway
-
-    - role: keepalived
-      tags:
-        - keepalived
-
     - role: memcached
       tags:
         - memcached
diff --git a/playbooks/site.yml b/playbooks/site.yml
index 8b7255b..5d44097 100644
--- a/playbooks/site.yml
+++ b/playbooks/site.yml
@@ -13,6 +13,18 @@
 # under the License.
 
 - import_playbook: vexxhost.ceph.site
-- import_playbook: vexxhost.atmosphere.kubernetes
-- import_playbook: vexxhost.atmosphere.csi
-- import_playbook: vexxhost.atmosphere.openstack
+
+- name: Install Kubernetes
+  import_playbook: vexxhost.atmosphere.kubernetes
+
+- name: Install CSI
+  import_playbook: vexxhost.atmosphere.csi
+
+- name: Deploy Infrastructure
+  ansible.builtin.import_playbook: vexxhost.atmosphere.infrastructure
+
+- name: Deploy Monitoring
+  ansible.builtin.import_playbook: vexxhost.atmosphere.monitoring
+
+- name: Deploy OpenStack
+  import_playbook: vexxhost.atmosphere.openstack