Déploiement avec Ansible et AWS S3

Déploiement avec Ansible et AWS S3

Ansible est un excellent outil permettant d’automatiser la gestion et le déploiement de l’orchestrateur Maverics. Utilisez ce guide en tant que base pour votre propre code Ansible ou en tant que ligne directrice pour un modèle de déploiement simple avec d’autres logiciels d’automatisation DevOps.

Nous utiliserons ici Ansible et un compartiment AWS S3 en tant que dépôt d’artefacts. Cette approche peut être utilisée pour les déploiements initiés par un administrateur ou configurés pour s’exécuter automatiquement dans le cadre d’un pipeline CI/CD.

Hypothèses et prérequis

  • Ansible est installé sur une machine de commande (par exemple un ordinateur portable local ou un serveur dédié dans un centre de données).
  • Un compartiment Amazon S3 est mis à la disposition du contrôleur et des hôtes cibles dans lesquels se trouvent des versions de l’orchestrateur.
  • La communication entre l’hôte cible et le contrôleur a déjà été établie.
  • L’hôte cible fonctionne sous un système d’exploitation Linux - RHEL/CentOS 7 ou supérieur.
  • Pour les besoins de ce guide, nous utilisons un client configurable appelé « ExampleCo ».

Structure des répertoires Ansible

Utilisez la structure d’annuaire recommandée dans la documentation Ansible.

Déploiement de Maverics

Initiez le déploiement à l’aide d’un playbook pointant vers un rôle unique (par exemple, example-cd) :

---

- name: ExampleCo Installation
  hosts: tag_Role_ExampleCo
  roles:
    - example-cd

Le rôle example-cd contient deux sous-répertoires

user1@controller-dev   ~/code/ansible/roles/example-cd
> $ ls -l
drwxr-xr-x  5 user1 staff  160 Aug 30 13:55 tasks
drwxr-xr-x  3 user1 staff   96 Aug 30 14:13 vars

main.yaml

Nous utilisons trois fichiers de tâches différents dans le répertoire des tâches qui sont pilotés à partir de main.yaml :

- name: Include a play after another play
  include: rpm-deploy.yml

- name: Include the configuration
  include: config.yml
  when: deploy_config == 'True'

rpm-deploy.yml

Cette tâche Ansible extrait l’artefact de déploiement depuis S3. Nous utilisons S3 en raison de son système de gestion des versions permettant de stocker nos artefacts de déploiement. Indiquez la version que vous souhaitez déployer en utilisant le fichier vars/main.yml. Le fichier rpm-deploy.yml ressemble à ce qui suit :

- name: Simple GET operation
  amazon.aws.aws_s3:
    bucket: strata-demo-distribution
    object: /maverics/releases/{{ item }}/maverics.{{ item }}.x86_64.rpm
    dest: /tmp/maverics.{{ item }}.x86_64.rpm
    mode: get
  loop:
     - "{{ install_maverics }}"

- name: Make the maverics RPM executable
  become: yes
  file:
    path: /tmp/maverics.{{ item }}.x86_64.rpm
    owner: centos
    group: centos
    mode: 0744
  loop:
    - "{{ install_maverics }}"

- name: Installing the maverics RPM
  become: yes
  dnf:
    name: /tmp/maverics.{{ item }}.x86_64.rpm
    state: present
    disable_gpg_check: yes
  register: yum_output
  loop:
    - "{{ install_maverics }}"

config.yml

Utilisez un fichier config.yml distinct car il n’est pas nécessaire de le déployer après chaque instance de l’orchestrateur Maverics. L’indicateur deploy_config dans vars(main.yml) déterminera si le fichier est déployé.

Étant donné que S3 est utilisé pour stocker le fichier de configuration, vous pouvez utiliser le système de gestion des versions S3 pour revenir à une version antérieure du fichier.

- name: GET an object but don't download if the file checksums match.
  amazon.aws.aws_s3:
    bucket: maverics-config
    object: /configs/maverics.yaml
    dest: /tmp/maverics.yaml
    # version: Q.rNd9.E8VDujhfOcFsKjfLOqHLPwgL5
    mode: get
    overwrite: different

- name: Copy a new file into place, backing up the original if it differs from the copied version
  become: yes
  ansible.builtin.copy:
    src: /tmp/maverics.yaml
    dest: /etc/maverics/maverics.yaml
    remote_src: yes
    owner: maverics
    group: maverics
    mode: '0777'
    backup: yes

- name: Remove file (delete file)
  ansible.builtin.file:
    path: /tmp/maverics.yaml
    state: absent

Exécution du playbook

Définissez la version de l’orchestrateur Maverics souhaitée dans vars/main.yaml et déterminez si une nouvelle configuration est déployée avec une nouvelle version de l’orchestrateur ou non.

install_maverics: v0.6.6
deploy_config: 'True'

Annulation du déploiement

Pour annuler un déploiement, il suffit de remplacer la version de maverics par la version souhaitée et de réexécuter le playbook. Notez que la version doit être présente en tant qu’objet dans le compartiment S3.