feat: move cilium to offline install
diff --git a/roles/cilium/defaults/main.yml b/roles/cilium/defaults/main.yml
new file mode 100644
index 0000000..25db54e
--- /dev/null
+++ b/roles/cilium/defaults/main.yml
@@ -0,0 +1,6 @@
+cilium_helm_release_name: cilium
+cilium_helm_chart_path: "{{ role_path }}/../../charts/cilium/"
+cilium_helm_chart_ref: /usr/local/src/cilium
+
+cilium_helm_release_namespace: kube-system
+cilium_helm_values: {}
diff --git a/roles/cilium/meta/main.yml b/roles/cilium/meta/main.yml
index 6711832..811ecc2 100644
--- a/roles/cilium/meta/main.yml
+++ b/roles/cilium/meta/main.yml
@@ -25,3 +25,7 @@
 
 dependencies:
   - role: defaults
+  - role: upload_helm_chart
+    vars:
+      upload_helm_chart_src: "{{ cilium_helm_chart_path }}"
+      upload_helm_chart_dest: "{{ cilium_helm_chart_ref }}"
diff --git a/roles/cilium/tasks/main.yml b/roles/cilium/tasks/main.yml
index 2322c3d..7067760 100644
--- a/roles/cilium/tasks/main.yml
+++ b/roles/cilium/tasks/main.yml
@@ -12,27 +12,11 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
-- name: Configure Helm repository
-  kubernetes.core.helm_repository:
-    name: cilium
-    repo_url: https://helm.cilium.io/
-
 - name: Deploy Helm chart
+  run_once: true
   kubernetes.core.helm:
-    name: cilium
-    chart_ref: cilium/cilium
-    chart_version: 1.10.7
-    release_namespace: kube-system
+    name: "{{ cilium_helm_release_name }}"
+    chart_ref: "{{ cilium_helm_chart_ref }}"
+    release_namespace: "{{ cilium_helm_release_namespace }}"
     kubeconfig: /etc/kubernetes/admin.conf
-    values:
-      image:
-        repository: "{{ atmosphere_images['cilium_node'] | docker_image('name') }}"
-      tunnel: geneve
-      operator:
-        image:
-          repository: "{{ atmosphere_images['cilium_operator'] | docker_image('name') | replace('-generic', '') }}"
-        nodeSelector:
-          openstack-control-plane: enabled
-      ipam:
-        operator:
-          clusterPoolIPv4PodCIDR: "{{ cilium_ipv4_cidr | default('10.0.0.0/8') }}"
+    values: "{{ _cilium_helm_values | combine(cilium_helm_values, recursive=True) }}"
diff --git a/roles/cilium/vars/main.yml b/roles/cilium/vars/main.yml
new file mode 100644
index 0000000..e9d418d
--- /dev/null
+++ b/roles/cilium/vars/main.yml
@@ -0,0 +1,12 @@
+_cilium_helm_values:
+  image:
+    repository: "{{ atmosphere_images['cilium_node'] | docker_image('name') }}"
+  tunnel: geneve
+  operator:
+    image:
+      repository: "{{ atmosphere_images['cilium_operator'] | docker_image('name') | replace('-generic', '') }}"
+    nodeSelector:
+      openstack-control-plane: enabled
+  ipam:
+    operator:
+      clusterPoolIPv4PodCIDR: "{{ cilium_ipv4_cidr | default('10.0.0.0/8') }}"