From 448035f50f660fb863bea4f86f220036f9a767e5 Mon Sep 17 00:00:00 2001 From: OldTyT Date: Mon, 26 Feb 2024 18:22:30 +0300 Subject: [PATCH] Initial commit --- .gitignore | 6 ++++++ .gitlab-ci.yml | 10 ++++++++++ .yamllint | 11 +++++++++++ README.md | 11 +++++++++++ defaults/main.yml | 6 ++++++ tasks/charts.yml | 47 +++++++++++++++++++++++++++++++++++++++++++++++ tasks/install.yml | 33 +++++++++++++++++++++++++++++++++ tasks/main.yml | 13 +++++++++++++ 8 files changed, 137 insertions(+) create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 .yamllint create mode 100644 README.md create mode 100644 defaults/main.yml create mode 100644 tasks/charts.yml create mode 100644 tasks/install.yml create mode 100644 tasks/main.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b1d83c4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ + +*.log +*.pyc +**/__pycache__/ +.env +.secrets diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..20d12bd --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,10 @@ +--- +stages: + - linter + +linter: + stage: linter + image: + name: osshelp/drone-linter + entrypoint: [""] + script: [entrypoint.sh] diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..ad0be76 --- /dev/null +++ b/.yamllint @@ -0,0 +1,11 @@ +extends: default + +rules: + braces: + max-spaces-inside: 1 + level: error + brackets: + max-spaces-inside: 1 + level: error + line-length: disable + truthy: disable diff --git a/README.md b/README.md new file mode 100644 index 0000000..69fa865 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# helm-charts + +Simple role for install helm charts + +Usage: +```yaml + - role: helm-charts + when: inventory_hostname == groups["k8s-master"][0] + helm_charts: + - { values_files: ["helm-value/prometheus.yaml.j2", "files/helm-value/common.yml"], version: "25.1.0", namespace: prometheus, release: prometheus, repo_name: prometheus-community, chart_name: prometheus, repo_url: https://prometheus-community.github.io/helm-charts } +``` \ No newline at end of file diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..738ac9e --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,6 @@ +--- +helm_binary_dir: "/usr/local/bin" + +helm_force_update: false +helm_version: "v3.13.1" +helm_url: "https://get.helm.sh/helm-{{ k3s_helm_version }}-linux-amd64.tar.gz" diff --git a/tasks/charts.yml b/tasks/charts.yml new file mode 100644 index 0000000..8a5c9b5 --- /dev/null +++ b/tasks/charts.yml @@ -0,0 +1,47 @@ +--- +- name: Create var copied files + set_fact: + copied_files: [] + +- name: Generate values file from template + template: + src: "{{ item }}" + dest: "/tmp/{{ item | basename | regex_replace('.j2', '') }}" + loop: "{{ item.values_files|default([]) }}" + when: item is match('.*\.j2$') + register: template_action + +- name: Copy yaml values + ansible.builtin.copy: + src: "{{ item }}" + dest: "/tmp/{{ item | basename }}" + loop: "{{ item.values_files|default('[]') }}" + when: not item is match('.*\.j2$') + register: copy_action + +- name: Create list copied files with j2 + set_fact: + copied_files: "{{ copied_files + ['/tmp/' + (item | basename | regex_replace('.j2', ''))] }}" + loop: "{{ item.values_files }}" + +- name: Add Helm repository + community.kubernetes.helm_repository: + name: "{{ item.repo_name }}" + repo_url: "{{ item.repo_url }}" + state: present + +- name: Install or upgrade Prometheus Helm chart + community.kubernetes.helm: + name: "{{ item.release }}" + chart_ref: "{{ item.repo_name }}/{{ item.chart_name }}" + release_namespace: "{{ item.namespace }}" + create_namespace: true + values_files: "{{ copied_files }}" + state: present + chart_version: "{{ item.version }}" + +- name: Remove prometheus values file + file: + path: "{{ item }}" + state: absent + loop: "{{ copied_files }}" diff --git a/tasks/install.yml b/tasks/install.yml new file mode 100644 index 0000000..62e4608 --- /dev/null +++ b/tasks/install.yml @@ -0,0 +1,33 @@ +--- +- name: Download helm + get_url: + url: "{{ k3s_helm_url }}" + dest: "/tmp/helm-{{ k3s_helm_version }}.tar.gz" + when: ansible_facts.architecture == "x86_64" + +- name: Create a directory to unpack Helm + tempfile: + state: directory + register: helm_unpack_directory + +- name: Unpack Helm tarball + unarchive: + src: "/tmp/helm-{{ k3s_helm_version }}.tar.gz" + remote_src: yes + dest: "{{ helm_unpack_directory.path }}" + +- name: Move Helm to the desired installation directory + copy: + src: "{{ helm_unpack_directory.path }}/linux-amd64/helm" + dest: "{{ k3s_binary_dir }}/helm" + remote_src: yes + mode: '0755' + when: ansible_facts.architecture == "x86_64" + +- name: Clean up downloaded and unpacked files + file: + path: "{{ item }}" + state: absent + with_items: + - "/tmp/helm-{{ k3s_helm_version }}.tar.gz" + - "{{ helm_unpack_directory.path }}" diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..46e861a --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,13 @@ +--- +- name: check if binary helm already exists + stat: + path: "{{ helm_binary_dir }}/helm" + register: binary_helm_check_result + +- name: install binary helm + include_tasks: installation.yml + when: not helm.stat.exists or helm_force_update + +- name: Install charts + include_tasks: charts.yml + loop: "{{ helm_charts|default('[]') }}"