Skip to content

Commit

Permalink
feat: ✨ FEAT: Réécriture uninstall.yaml + doc du sujet dans README + …
Browse files Browse the repository at this point in the history
…fix mineur get-credential
  • Loading branch information
cedric-montagne committed Jun 19, 2023
1 parent 665ba42 commit 674eea8
Show file tree
Hide file tree
Showing 3 changed files with 210 additions and 37 deletions.
78 changes: 65 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@
- [Debug](#debug)
- [Réinstallation](#réinstallation)
- [Keycloak](#keycloak)
- [Désinstallation](#désinstallation)

## Introduction

L'installation de la forge DSO (DevSecOps) se fait **via Ansible**. Chaque élément sera donc installé de manière automatisée. Certains peuvent prendre un peu de temps (par exemple keycloak ou gitlab).
L'installation de la forge DSO (DevSecOps) se fait **via Ansible**. Chaque élément sera donc installé de manière automatisée. Certains peuvent prendre un peu de temps (par exemple Keycloak ou GitLab).

## Prérequis

Expand All @@ -32,7 +33,9 @@ Elle nécessitera d'avoir installé au préalable les éléments suivants **sur

Exemple d'installation du module python-gitlab pour l'utilisateur courant :

```python3 -m pip install --user python-gitlab```
```
python3 -m pip install --user python-gitlab
```

- [Ansible](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html) (pour disposer de la commande ansible-playbook).

Expand All @@ -56,22 +59,28 @@ Exemple d'installation du module python-gitlab pour l'utilisateur courant :

Une fois le dépôt dso-socle cloné, lancez une première fois la commande suivante depuis votre environnement de déploiement :

```ansible-playbook install.yaml```
```
ansible-playbook install.yaml
```

Elle vous signalera que vous n'avez encore jamais installé le socle sur votre cluster, puis vous invitera à modifier la resource de type **dsc** nommée **conf-dso** et de scope cluster
via la commande suivante :

```kubectl edit dsc conf-dso```
```
kubectl edit dsc conf-dso
```

Lancer la commande ci-dessus pour éditer la ressource indiquée.

Alternativement, et comme précisé, vous pourrez aussi déclarer la ressource conf-dso dans un fichier YAML, nommé par exemple 'ma-conf-dso.yaml', puis la créer via la commande suivante :

```kubectl apply -f ma-conf-dso.yaml```
```
kubectl apply -f ma-conf-dso.yaml
```

Voici un **exemple** de fichier de configuration valide, à adapter à partir de la section **spec**, notamment au niveau des mots de passe ou des numéros de versions :

````
```
---
kind: DsoSocleConfig
apiVersion: cloud-pi-native.fr/v1alpha
Expand Down Expand Up @@ -142,13 +151,15 @@ spec:
vault:
namespace: mynamespace-vault
subDomain: vault
````
```
## Installation

### Lancement
Jouez la commande suivante :

```ansible-playbook install.yaml```
```
ansible-playbook install.yaml
```

Patientez …

Expand All @@ -161,28 +172,69 @@ Afin de faciliter la récupération des secrets, un playbook d'administration no

Pour le lancer :

```ansible-playbook admin-tools/get-credentials.yaml```
```
ansible-playbook admin-tools/get-credentials.yaml
```

Ce playbook permet également de cibler un outil en particulier, grâce à l'utilisation de tags qui sont listés au début de l'exécution, exemple avec keycloak :

```ansible-playbook admin-tools/get-credentials.yaml -t keycloak```
```
ansible-playbook admin-tools/get-credentials.yaml -t keycloak
```

Vous pouvez conserver les valeurs ainsi obtenues ailleurs, par exemple dans un fichier de base de données chiffré de type KeePass ou Bitwarden, mais il est important de **ne pas les modifier ou les supprimer** sous peine de voir certains composants, par exemple Vault, être réinitialisés.

## Debug
### Réinstallation
Si vous rencontrez des problèmes lors de l'éxécution du playbook, vous voudrez certainement relancer l'installation d'un ou plusieurs composants plutôt que d'avoir à tout réinstaller.

Pour cela, vous pouvez utiliser les tags associés au rôle dans le fichier `install.yaml`. Voici par exemple comment réinstaller uniquement les composants keycloak et console, via les tags correspondants :

```ansible-playbook install.yaml -t keycloak,console```
```
ansible-playbook install.yaml -t keycloak,console
```

### Keycloak
L'opérateur keycloak peut être assez capricieux. Son état souhaité est `status.phase == 'reconciling'`.

En cas d'échec lors de l'installation, vous vérifierez ce qu'il en est avec la commande :

```kubectl get keycloak dso-keycloak -n mynamespace-keycloak -o yaml```
```
kubectl get keycloak dso-keycloak -n mynamespace-keycloak -o yaml
```

Il se peut que Keycloak reste bloqué en status "initializing" mais que tout soit provisionné. Dans ce cas, relancez plutôt le playbook comme ceci :

```ansible-playbook install.yaml -e KEYCLOAK_NO_CHECK=```
```
ansible-playbook install.yaml -e KEYCLOAK_NO_CHECK=
```

## Désinstallation

Un playbook de désinstallation nommé `uninstall.yaml` est disponible.

Il permet de désinstaller toute la chaîne DSO en une seule fois, via l'utilisation du tag `all`.

Pour le lancer :

````
ansible-playbook uninstall.yaml -t all
````

Selon les performances ou la charge de votre cluster, la désinstallation de certains composants (par exemple Harbor) pourra prendre un peu de temps.

Pour surveiller l'état d'une désinstallation en cours, il sera possible de s'appuyer sur la commande suivante :

````
watch 'kubectl get ns | grep -i dso'
````

Le playbook de désinstallation peut aussi être utilisé pour supprimer un ou plusieurs outils de manière ciblée, via les tags associés.

L'idée est de faciliter leur réinstallation complète, en utilisant ensuite le playbook d'installation (voir la sous-section [Réinstallation](#réinstallation) de la section Debug).

Par exemple, pour désinstaller uniquement Keycloak et ArgoCD la commande sera la suivante :

````
ansible-playbook uninstall.yaml -t keycloak,argocd
````
10 changes: 5 additions & 5 deletions admin-tools/get-credentials.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
- "sops"
- "argo (or argocd)"
- "harbor"
- "console (or console-pi)"
- "console (or console-dso)"
tags:
- always

Expand Down Expand Up @@ -57,7 +57,7 @@
- argo
- argocd
- console
- console-pi
- console-dso

- name: Set Keycloak DSO user facts
ansible.builtin.set_fact:
Expand All @@ -68,7 +68,7 @@
- argo
- argocd
- console
- console-pi
- console-dso

- name: Get Keycloak admin secret
kubernetes.core.k8s_info:
Expand Down Expand Up @@ -181,7 +181,7 @@
register: console_pi_ingress
tags:
- console
- console-pi
- console-dso

- name: Display Console Pi Native URL and credentials
ansible.builtin.debug:
Expand All @@ -191,4 +191,4 @@
- "Admin password: {{ keycloak_user_password }} "
tags:
- console
- console-pi
- console-dso
159 changes: 140 additions & 19 deletions uninstall.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
- hosts: localhost
- name: Désinstallation du socle DSO
hosts: localhost
gather_facts: false

roles:
Expand All @@ -7,26 +8,42 @@
- always

post_tasks:
- name: Suppression des namespaces
kubernetes.core.k8s:

- name: Désinstallation de Kubed
kubernetes.core.helm:
name: kubed
chart_ref: appscode/kubed
release_namespace: openshift-infra
state: absent
kind: Namespace
name: "{{ item }}"
with_items:
- "{{ dsc.console.namespace }}"
- "{{ dsc.sops.namespace }}"
- "{{ dsc.sonarqube.namespace }}"
- "{{ dsc.vault.namespace }}"
- "{{ dsc.nexus.namespace }}"
- "{{ dsc.harbor.namespace }}"
- "{{ dsc.argocd.namespace }}"
wait: true
tags:
- confSyncer
- kubed

- name: Récupérations des clients Keycloak
kubernetes.core.k8s_info:
api_version: keycloak.org/v1alpha1
kind: KeycloakClient
namespace: "{{ dsc.keycloak.namespace }}"
register: keycloak_clients
tags:
- keycloak
- all

- name: Patch des clients Keycloak (finalizers)
kubernetes.core.k8s:
state: patched
api_version: keycloak.org/v1alpha1
kind: KeycloakClient
name: "{{ item.metadata.name }}"
namespace: "{{ dsc.keycloak.namespace }}"
definition:
metadata:
finalizers: []
with_items: "{{ keycloak_clients.resources }}"
tags:
- keycloak
- all

- name: Suppression des clients Keycloak
kubernetes.core.k8s:
Expand All @@ -36,6 +53,28 @@
name: "{{ item.metadata.name }}"
namespace: "{{ dsc.keycloak.namespace }}"
with_items: "{{ keycloak_clients.resources }}"
tags:
- keycloak
- all

- name: Patch des ressources Keycloak (finalizers)
kubernetes.core.k8s:
state: patched
api_version: keycloak.org/v1alpha1
kind: "{{ item.kind }}"
name: "{{ item.name }}"
namespace: "{{ dsc.keycloak.namespace }}"
definition:
metadata:
finalizers: []
with_items:
- kind: KeycloakRealm
name: dso-realm
- kind: KeycloakUser
name: admin-gitlab
tags:
- keycloak
- all

- name: Suppression des ressources Keycloak
kubernetes.core.k8s:
Expand All @@ -49,6 +88,36 @@
name: dso-realm
- kind: KeycloakUser
name: admin-gitlab
tags:
- keycloak
- all

- name: Suppression du namespace Keycloak
kubernetes.core.k8s:
state: absent
kind: Namespace
name: "{{ dsc.keycloak.namespace }}"
tags:
- keycloak
- all

- name: Suppression du namespace Nexus
kubernetes.core.k8s:
state: absent
kind: Namespace
name: "{{ dsc.nexus.namespace }}"
tags:
- nexus
- all

- name: Suppression du namespace Sonarqube
kubernetes.core.k8s:
state: absent
kind: Namespace
name: "{{ dsc.sonarqube.namespace }}"
tags:
- sonarqube
- all

- name: Suppression du gitlab runner
kubernetes.core.k8s:
Expand All @@ -57,16 +126,68 @@
kind: Runner
name: gitlab-runner
namespace: "{{ dsc.gitlab.namespace }}"
tags:
- gitlab-runner
- gitlab
- all

- name: Suppression des namespaces restants
- name: Suppression du namespace GitLab
kubernetes.core.k8s:
state: absent
kind: Namespace
name: "{{ item }}"
with_items:
- "{{ dsc.keycloak.namespace }}"
- "{{ dsc.gitlab.namespace }}"
- cluster-infra
name: "{{ dsc.gitlab.namespace }}"
tags:
- gitlab
- all

- name: Suppression du namespace Vault
kubernetes.core.k8s:
state: absent
kind: Namespace
name: "{{ dsc.vault.namespace }}"
tags:
- vault
- all

- name: Suppression du namespace SOPS
kubernetes.core.k8s:
state: absent
kind: Namespace
name: "{{ dsc.sops.namespace }}"
tags:
- sops
- all

- name: Suppression du namespace ArgoCD
kubernetes.core.k8s:
state: absent
kind: Namespace
name: "{{ dsc.argocd.namespace }}"
tags:
- argocd
- argo
- gitops
- all

- name: Suppression du namespace Harbor
kubernetes.core.k8s:
state: absent
kind: Namespace
name: "{{ dsc.harbor.namespace }}"
tags:
- harbor
- registry
- all

- name: Suppression du namespace Console
kubernetes.core.k8s:
state: absent
kind: Namespace
name: "{{ dsc.console.namespace }}"
tags:
- console-dso
- console
- all

- name: Remove local vars
ansible.builtin.file:
Expand Down

0 comments on commit 674eea8

Please sign in to comment.