feat: allow cloud spec overrides

Closes: #231
diff --git a/roles/atmosphere/defaults/main.yml b/roles/atmosphere/defaults/main.yml
index 7353275..aa225fc 100644
--- a/roles/atmosphere/defaults/main.yml
+++ b/roles/atmosphere/defaults/main.yml
@@ -8,3 +8,5 @@
     overrides: "{{ openstack_helm_infra_memcached_values | default({}) }}"
   issuer: "{{ atmosphere_issuer_config }}"
   opsgenie: "{{ atmosphere_opsgenie_config | default({}) }}"
+
+atmosphere_cloud_spec: {}
diff --git a/roles/atmosphere/templates/resources.yml b/roles/atmosphere/templates/resources.yml
index 0644527..bce31b0 100644
--- a/roles/atmosphere/templates/resources.yml
+++ b/roles/atmosphere/templates/resources.yml
@@ -41,10 +41,4 @@
 metadata:
   name: atmosphere
   namespace: openstack
-spec:
-  imageRepository: "{{ atmosphere_image_repository | default('quay.io/vexxhost') }}"
-  ingressClassName: "{{ openstack_helm_ingress_class_name | default('openstack') }}"
-  certManagerClusterIssuer: "{{ openstack_helm_ingress_cluster_issuer | default('atmosphere') }}"
-  regionName: "{{ openstack_helm_endpoints_region_name }}"
-  magnum:
-    endpoint: "{{ openstack_helm_endpoints_magnum_api_host }}"
+spec: {{ _atmosphere_cloud_spec | combine(atmosphere_cloud_spec, recursive=True) | to_json }}
diff --git a/roles/atmosphere/vars/main.yml b/roles/atmosphere/vars/main.yml
new file mode 100644
index 0000000..3e17ec5
--- /dev/null
+++ b/roles/atmosphere/vars/main.yml
@@ -0,0 +1,7 @@
+atmosphere_cloud_spec:
+  imageRepository: "{{ atmosphere_image_repository | default('quay.io/vexxhost') }}"
+  ingressClassName: "{{ openstack_helm_ingress_class_name | default('openstack') }}"
+  certManagerClusterIssuer: "{{ openstack_helm_ingress_cluster_issuer | default('atmosphere') }}"
+  regionName: "{{ openstack_helm_endpoints_region_name }}"
+  magnum:
+    endpoint: "{{ openstack_helm_endpoints_magnum_api_host }}"