feat: added operator role
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..0a79056
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,8 @@
+# Ignore everything
+*
+
+# Except the actual Python-package related files
+!atmosphere/**
+!poetry.lock
+!pyproject.toml
+!README.md
diff --git a/molecule/default/group_vars/all/molecule.yml b/molecule/default/group_vars/all/molecule.yml
index 476079d..eed6fd7 100644
--- a/molecule/default/group_vars/all/molecule.yml
+++ b/molecule/default/group_vars/all/molecule.yml
@@ -1,3 +1,5 @@
+atmosphere_image: "{{ lookup('file', lookup('env', 'MOLECULE_EPHEMERAL_DIRECTORY') + '/image') }}"

+

 cert_manager_issuer:

   ca:

     secretName: root-secret

diff --git a/molecule/default/tools/install-dependencies b/molecule/default/tools/install-dependencies
index 4d5fa6d..6477a1b 100755
--- a/molecule/default/tools/install-dependencies
+++ b/molecule/default/tools/install-dependencies
@@ -1,28 +1,18 @@
 #!/bin/sh -e
 
+# Generate image tag file
+IMAGE_TAG_FILE="${MOLECULE_EPHEMERAL_DIRECTORY}/image"
+
+# Check if it exists, otherwise create it.
+if [ ! -f "${IMAGE_TAG_FILE}" ]; then
+  echo "ttl.sh/$(uuidgen | tr '[:upper:]' '[:lower:]'):1d" > ${IMAGE_TAG_FILE}
+fi
+
+# Build operator image
+docker buildx build --platform linux/amd64 --tag $(cat ${IMAGE_TAG_FILE}) --push .
+
 # Install OpenStack SDK
 pip install \
   --extra-index-url https://vexxhost.github.io/wheels/alpine-3.15/ \
   netaddr \
   'openstacksdk<0.99.0'
-
-# Get the path for the collection
-COLLECTION_PATH="${HOME}/.ansible/collections/ansible_collections/vexxhost/atmosphere"
-
-# Clean-up old soft link to allow successful installation
-if [ -L "${COLLECTION_PATH}" ] && [ -d "${COLLECTION_PATH}" ]; then
-  echo "Deleting old soft link to allow successful installation"
-
-  rm ${COLLECTION_PATH}
-fi
-
-# Install Atmosphere collection
-ansible-galaxy collection install .
-
-# Switch to symbolic link after installation
-if [ ! -L "${COLLECTION_PATH}" ] && [ -d "${COLLECTION_PATH}" ]; then
-  echo "Deleting installed collection and adding soft link instead."
-
-  rm -rf ${COLLECTION_PATH}
-  ln -s . ${COLLECTION_PATH}
-fi
diff --git a/plugins/filter/to_toml.py b/plugins/filter/to_toml.py
new file mode 100644
index 0000000..9b663cd
--- /dev/null
+++ b/plugins/filter/to_toml.py
@@ -0,0 +1,15 @@
+#!/usr/bin/python
+
+import json
+
+import toml
+
+
+class FilterModule(object):
+    def filters(self):
+        return {"to_toml": self.to_toml}
+
+    def to_toml(self, variable):
+        s = json.dumps(dict(variable))
+        d = json.loads(s)
+        return toml.dumps(d)
diff --git a/roles/atmosphere/defaults/main.yml b/roles/atmosphere/defaults/main.yml
new file mode 100644
index 0000000..91157b8
--- /dev/null
+++ b/roles/atmosphere/defaults/main.yml
@@ -0,0 +1,7 @@
+atmosphere_image: quay.io/vexxhost/atmosphere:latest
+
+atmosphere_config:
+  atmosphere:
+    memcached:
+      secret_key: "{{ openstack_helm_endpoints_memcached_secret_key }}"
+      overrides: "{{ openstack_helm_infra_memcached_values | default({}) }}"
diff --git a/roles/atmosphere/tasks/main.yml b/roles/atmosphere/tasks/main.yml
new file mode 100644
index 0000000..7d95c22
--- /dev/null
+++ b/roles/atmosphere/tasks/main.yml
@@ -0,0 +1,10 @@
+- name: Install operator
+  kubernetes.core.k8s:
+    state: present
+    template:
+      - namespace.yml
+      - role.yml
+      - service_account.yml
+      - role_binding.yml
+      - secret.yml
+      - deployment.yml
diff --git a/roles/openstack_helm_infra_memcached/defaults/main.yml b/roles/openstack_helm_infra_memcached/defaults/main.yml
deleted file mode 100644
index 7d46c47..0000000
--- a/roles/openstack_helm_infra_memcached/defaults/main.yml
+++ /dev/null
@@ -1,19 +0,0 @@
----
-# .. vim: foldmarker=[[[,]]]:foldmethod=marker
-
-# .. Copyright (C) 2022 VEXXHOST, Inc.
-# .. SPDX-License-Identifier: Apache-2.0
-
-# Default variables
-# =================
-
-# .. contents:: Sections
-#    :local:
-
-
-# .. envvar:: openstack_helm_infra_memcached_values [[[
-#
-# Overrides for Helm chart values
-openstack_helm_infra_memcached_values: {}
-
-                                                                   # ]]]
diff --git a/roles/openstack_helm_infra_memcached/meta/main.yml b/roles/openstack_helm_infra_memcached/meta/main.yml
index 957f2d5..8cc8938 100644
--- a/roles/openstack_helm_infra_memcached/meta/main.yml
+++ b/roles/openstack_helm_infra_memcached/meta/main.yml
@@ -22,3 +22,6 @@
     - name: Ubuntu
       versions:
         - focal
+
+dependencies:
+  - role: atmosphere
diff --git a/roles/openstack_helm_infra_memcached/tasks/main.yml b/roles/openstack_helm_infra_memcached/tasks/main.yml
index cb482d5..379a472 100644
--- a/roles/openstack_helm_infra_memcached/tasks/main.yml
+++ b/roles/openstack_helm_infra_memcached/tasks/main.yml
@@ -12,14 +12,6 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
-- name: Generate OpenStack-Helm endpoints
-  ansible.builtin.include_role:
-    name: openstack_helm_endpoints
-  vars:
-    openstack_helm_endpoints_repo_name: openstack-helm-infra
-    openstack_helm_endpoints_repo_url: https://tarballs.opendev.org/openstack/openstack-helm-infra/
-    openstack_helm_endpoints_chart: memcached
-
 - name: Deploy Helm chart
   kubernetes.core.k8s:
     state: present
@@ -33,14 +25,6 @@
           interval: 60s
           url: https://tarballs.opendev.org/openstack/openstack-helm-infra/
 
-      - apiVersion: v1
-        kind: Secret
-        metadata:
-          name: atmosphere-memcached
-          namespace: openstack
-        stringData:
-          values.yaml: "{{ _openstack_helm_infra_memcached_values | to_nice_yaml }}"
-
       - apiVersion: helm.toolkit.fluxcd.io/v2beta1
         kind: HelmRelease
         metadata:
diff --git a/roles/openstack_helm_infra_memcached/vars/main.yml b/roles/openstack_helm_infra_memcached/vars/main.yml
deleted file mode 100644
index 4acb969..0000000
--- a/roles/openstack_helm_infra_memcached/vars/main.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2022 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.
-
-_openstack_helm_infra_memcached_values: "{{ __openstack_helm_infra_memcached_values | combine(openstack_helm_infra_memcached_values, recursive=True) }}"
-__openstack_helm_infra_memcached_values:
-  endpoints: "{{ openstack_helm_endpoints }}"
-  images:
-    tags:
-      memcached: quay.io/vexxhost/memcached:1.6.9
-      prometheus_memcached_exporter: quay.io/vexxhost/memcached-exporter:v0.9.0-1
-  monitoring:
-    prometheus:
-      enabled: true