diff --git a/ansible/group_vars/all/oas.yml b/ansible/group_vars/all/oas.yml index 0f3808e827afa014ef6632aa5b28cba8fb605bae..77ee8c694a7b2bb622d099c784e7f25f9f99f014 100644 --- a/ansible/group_vars/all/oas.yml +++ b/ansible/group_vars/all/oas.yml @@ -57,3 +57,8 @@ cert_manager: prometheus: crd_version: 'v0.34.0' + +# Let the auto-update mechanism (flux) follow a cluster-local git repo, +# not one hosted on open.greenhost.net. +# Currently needed in order to deploy OAS applications. +local_flux: true diff --git a/ansible/roles/apps/tasks/cert-manager.yml b/ansible/roles/apps/tasks/cert-manager.yml index 6ad32349443ae3d59ff40a76d2690f54395cd054..73757a6fcdbd05d161cb87b614b6d9ecbec6ed1d 100644 --- a/ansible/roles/apps/tasks/cert-manager.yml +++ b/ansible/roles/apps/tasks/cert-manager.yml @@ -50,13 +50,8 @@ - config - flux - cert-manager - k8s: - state: present - definition: - api_version: v1 - kind: Secret - metadata: - namespace: "oas" - name: "cert-manager-settings" - data: - values.yaml: "{{ lookup('template','cert-manager-values.yaml') | b64encode }}" + vars: + flux: + name: "cert-manager-settings" + namespace: "oas" + include_tasks: flux_secret.yml diff --git a/ansible/roles/apps/tasks/flux_secret.yml b/ansible/roles/apps/tasks/flux_secret.yml new file mode 100644 index 0000000000000000000000000000000000000000..23cac6b5b1c7b9098bf4480c4f7163f157def45a --- /dev/null +++ b/ansible/roles/apps/tasks/flux_secret.yml @@ -0,0 +1,16 @@ +--- +- name: Create Kubernetes secret with app settings + tags: + - config + - flux + - secret + k8s: + state: present + definition: + api_version: v1 + kind: Secret + metadata: + namespace: "{{ flux.namespace | default('oas-apps') }}" + name: "{{ flux.name }}" + data: + values.yaml: "{{ lookup('template','{{ flux.name }}.yaml') | b64encode }}" diff --git a/ansible/roles/apps/tasks/local-storage.yml b/ansible/roles/apps/tasks/local-storage.yml index 8b01f5bf0a5d8ac7f6d797325c917163f30b6b6c..99b67ed82409459696fe30c40b0cbb394619de73 100644 --- a/ansible/roles/apps/tasks/local-storage.yml +++ b/ansible/roles/apps/tasks/local-storage.yml @@ -1,17 +1,11 @@ --- - -- name: Create Kubernetes secret with local-storage values +- name: Create Kubernetes secret with local-storage settings tags: - config - flux - local-storage - k8s: - state: present - definition: - api_version: v1 - kind: Secret - metadata: - namespace: "oas" - name: "local-storage-settings" - data: - values.yaml: "{{ lookup('template','local-storage-values.yaml') | b64encode }}" + vars: + flux: + name: "local-storage-settings" + namespace: "oas" + include_tasks: flux_secret.yml diff --git a/ansible/roles/apps/tasks/nextcloud.yml b/ansible/roles/apps/tasks/nextcloud.yml index af3bdc5788ede5c437acb4f1ec05cac436020ab9..3ecf26ee46f15f530c140e07bd8bfc9c8e300d47 100644 --- a/ansible/roles/apps/tasks/nextcloud.yml +++ b/ansible/roles/apps/tasks/nextcloud.yml @@ -1,17 +1,11 @@ --- -- name: Create Kubernetes secret with NextCloud settings +- name: Create Kubernetes secret with nextcloud settings tags: - config - flux - nextcloud - k8s: - state: present - definition: - api_version: v1 - kind: Secret - metadata: - namespace: "oas-apps" - name: "nextcloud-settings" - data: - values.yaml: "{{ lookup('template','nextcloud-values.yaml') | b64encode }}" + vars: + flux: + name: "nextcloud-settings" + include_tasks: flux_secret.yml diff --git a/ansible/roles/apps/tasks/nginx.yml b/ansible/roles/apps/tasks/nginx.yml index a84dd71746cb6727dac73ae062baf57b25d7dad8..4e4f75bc6cbd626e618775457256dc88d4828192 100644 --- a/ansible/roles/apps/tasks/nginx.yml +++ b/ansible/roles/apps/tasks/nginx.yml @@ -5,13 +5,8 @@ - config - flux - nginx - k8s: - state: present - definition: - api_version: v1 - kind: Secret - metadata: - namespace: "oas" - name: "ingress-settings" - data: - values.yaml: "{{ lookup('template','ingress-values.yaml') | b64encode }}" + vars: + flux: + name: "ingress-settings" + namespace: "oas" + include_tasks: flux_secret.yml diff --git a/ansible/roles/apps/tasks/prometheus.yml b/ansible/roles/apps/tasks/prometheus.yml index 9866fa72611a751a0552d8d0d13f2d08db00ef97..2e2ef3987bb436803d0130df918b002116003c32 100644 --- a/ansible/roles/apps/tasks/prometheus.yml +++ b/ansible/roles/apps/tasks/prometheus.yml @@ -37,13 +37,8 @@ - flux - monitoring - prometheus - k8s: - state: present - definition: - api_version: v1 - kind: Secret - metadata: - namespace: "oas" - name: "monitoring-settings" - data: - values.yaml: "{{ lookup('template','monitoring-values.yaml') | b64encode }}" + vars: + flux: + name: "monitoring-settings" + namespace: "oas" + include_tasks: flux_secret.yml diff --git a/ansible/roles/apps/templates/cert-manager-values.yaml b/ansible/roles/apps/templates/cert-manager-settings.yaml similarity index 100% rename from ansible/roles/apps/templates/cert-manager-values.yaml rename to ansible/roles/apps/templates/cert-manager-settings.yaml diff --git a/ansible/roles/apps/templates/ingress-values.yaml b/ansible/roles/apps/templates/ingress-settings.yaml similarity index 100% rename from ansible/roles/apps/templates/ingress-values.yaml rename to ansible/roles/apps/templates/ingress-settings.yaml diff --git a/ansible/roles/apps/templates/local-storage-values.yaml b/ansible/roles/apps/templates/local-storage-settings.yaml similarity index 100% rename from ansible/roles/apps/templates/local-storage-values.yaml rename to ansible/roles/apps/templates/local-storage-settings.yaml diff --git a/ansible/roles/apps/templates/monitoring-values.yaml b/ansible/roles/apps/templates/monitoring-settings.yaml similarity index 100% rename from ansible/roles/apps/templates/monitoring-values.yaml rename to ansible/roles/apps/templates/monitoring-settings.yaml diff --git a/ansible/roles/apps/templates/nextcloud-values.yaml b/ansible/roles/apps/templates/nextcloud-settings.yaml similarity index 100% rename from ansible/roles/apps/templates/nextcloud-values.yaml rename to ansible/roles/apps/templates/nextcloud-settings.yaml diff --git a/ansible/roles/local-flux/defaults/main.yml b/ansible/roles/local-flux/defaults/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..066d0e6268aba83bd545c43b4c7aeee43af203cd --- /dev/null +++ b/ansible/roles/local-flux/defaults/main.yml @@ -0,0 +1,2 @@ +--- +repo: "/var/lib/OpenAppStack/local-flux" diff --git a/ansible/roles/local-flux/tasks/main.yml b/ansible/roles/local-flux/tasks/main.yml index 4bf719ff6a91e77be5a29e5a8d5616593fb10a93..158b5b747e09410b92fe3b4a5e1cf13cc760607d 100644 --- a/ansible/roles/local-flux/tasks/main.yml +++ b/ansible/roles/local-flux/tasks/main.yml @@ -1,72 +1,67 @@ --- -- block: - - - name: Copy HelmRelease files to server's local flux repo - tags: - - flux - copy: - src: "../../../flux/" - dest: "{{ repo }}" - register: helmreleases - become: true +- name: Copy HelmRelease files to server's local flux repo + tags: + - flux + copy: + src: "../../../flux/" + dest: "{{ repo }}" + register: helmreleases + become: true - - name: Create local flux repo - tags: - - flux - command: git init "{{ repo }}" - args: - creates: "{{ repo }}/.git" - become: true +- name: Create local flux repo + tags: + - flux + command: git init "{{ repo }}" + args: + creates: "{{ repo }}/.git" + become: true - - name: Enable post-update hook in local flux repo - tags: - - flux - copy: - src: "git-hook.sh" - dest: "{{ repo }}/.git/hooks/{{ item }}" - mode: "0755" - with_items: - - "post-update" - - "post-commit" - become: true +- name: Enable post-update hook in local flux repo + tags: + - flux + copy: + src: "git-hook.sh" + dest: "{{ repo }}/.git/hooks/{{ item }}" + mode: "0755" + with_items: + - "post-update" + - "post-commit" + become: true - - name: Add HelmRelease files to local flux commit - tags: - - flux - shell: git add . && git -c "user.name=OpenAppStack automation" -c "user.email=tech@openappstack.net" commit --allow-empty --author="OpenAppStack automation <>" -m "Local flux via ansible" - args: - chdir: "{{ repo }}" - when: helmreleases.changed - become: true +- name: Add HelmRelease files to local flux commit + tags: + - flux + shell: git add . && git -c "user.name=OpenAppStack automation" -c "user.email=tech@openappstack.net" commit --allow-empty --author="OpenAppStack automation <>" -m "Local flux via ansible" + args: + chdir: "{{ repo }}" + when: helmreleases.changed + become: true - - name: Create local-flux helm chart directory - tags: - - flux - file: - path: "/var/lib/OpenAppStack/source/local-flux/templates" - state: directory - become: true +- name: Create local-flux helm chart directory + tags: + - flux + file: + path: "/var/lib/OpenAppStack/source/local-flux/templates" + state: directory + become: true - - name: Copy local-flux helm chart to server - tags: - - flux - copy: - src: "{{ item.file }}" - dest: "/var/lib/OpenAppStack/source/local-flux/{{ item.subdir }}/{{ item.file }}" - with_items: - - file: "nginx.yaml" - subdir: "templates" - - file: "values.yaml" - subdir: "." - - file: "Chart.yaml" - subdir: "." - become: true +- name: Copy local-flux helm chart to server + tags: + - flux + copy: + src: "{{ item.file }}" + dest: "/var/lib/OpenAppStack/source/local-flux/{{ item.subdir }}/{{ item.file }}" + with_items: + - file: "nginx.yaml" + subdir: "templates" + - file: "values.yaml" + subdir: "." + - file: "Chart.yaml" + subdir: "." + become: true - - name: Install local-flux helm chart - tags: - - flux - shell: helm upgrade --install --namespace=oas local-flux /var/lib/OpenAppStack/source/local-flux - - vars: - repo: "/var/lib/OpenAppStack/local-flux" +- name: Install local-flux helm chart + tags: + - flux + shell: helm upgrade --install --namespace=oas local-flux /var/lib/OpenAppStack/source/local-flux diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index 45bad692c4474b6fa6eac48e6020cf3c3c783b2f..16dd305002f56e59f61606e5c0f56ae68cab0786 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -2,6 +2,14 @@ Note: `cluster$` indicates that the commands should be run as root on your OAS cluster. +## Upgrading + +If you encounter problems when you upgrade your cluster, please make sure first +to include all potential new values of `ansible/group_vars/all/settings.yml.example` +to your `clusters/YOUR_CLUSTERNAME/settings.yml`, and rerun the installation +script. + + ## HTTPS Certificates OAS uses [cert-manager](http://docs.cert-manager.io/en/latest/) to automatically @@ -34,4 +42,5 @@ If ever things fail beyond possible recovery, here's how to completely purge an cluster$ apt purge docker-ce-cli containerd.io cluster$ mount | egrep '^(tmpfs.*kubelet|nsfs.*docker)' | cut -d' ' -f 3 | xargs umount + cluster$ systemctl reboot cluster$ rm -rf /var/lib/docker /var/lib/OpenAppStack /etc/kubernetes /var/lib/etcd /var/lib/rancher /var/lib/kubelet /var/log/OpenAppStack /var/log/containers /var/log/pods diff --git a/openappstack/cluster.py b/openappstack/cluster.py index a3927bd8743b01527ccdd53e3db227075569c879..51cf07f4f49b1fbd28d0bfae6677acd08cc9f4a6 100644 --- a/openappstack/cluster.py +++ b/openappstack/cluster.py @@ -41,9 +41,6 @@ class Cluster: self.domain = None # By default, use Let's Encrypt's live environment self.acme_staging = False - # Let the auto-update mechanism (flux) follow a cluster-local git repo, - # not one hosted on open.greenhost.net. - self.local_flux = True # Set this to False if the data needs to be (re)loaded from file self.data_loaded = False # Load data from inventory.yml and settings.yml @@ -150,7 +147,6 @@ class Cluster: settings['domain'] = self.domain settings['admin_email'] = 'admin@{0}'.format(self.domain) settings['acme_staging'] = self.acme_staging - settings['local_flux'] = self.local_flux settings['cluster_dir'] = self.cluster_dir file_contents = yaml.safe_dump(settings, default_flow_style=False)