run_playbook/deploy_mongo.yml
2025-05-28 15:08:26 +00:00

87 lines
3.8 KiB
YAML

---
- name: Clone a Git repository and run an Ansible role from it on localhost
hosts: localhost
connection: local
vars:
# --- REQUIRED VARIABLES (Adjust these) ---
repo_url: "git@git.felcloud.io:felcloud/ansible_roles_mongodb.git" # The URL of the Git repository to clone
role_name: "ansible_roles_mongodb" # The NAME of the role directory *inside* the cloned repo.
# E.g., if your repo contains 'my_project/roles/nginx_role',
# then 'role_name' would be 'nginx_role'.
# --- DERIVED / CONFIGURABLE PATHS ---
# The directory where the entire Git repository will be cloned.
# Choose a location accessible by the Ansible user. Using /tmp for temporary execution.
repo_clone_dest: "/tmp/ansible_cloned_repo_for_dynamic_role"
# Assumes roles are typically located in a 'roles/' subdirectory within the repository root.
# If your roles are in a different structure (e.g., directly in the repo root or 'ansible/roles'),
# adjust 'role_base_dir_in_repo' accordingly.
# For example: If your role is directly in the repo root: `role_base_dir_in_repo: ""`
# If your role is in 'ansible/roles': `role_base_dir_in_repo: "ansible/roles"`
role_base_dir_in_repo: "ansible_roles_mongodb" # Directory containing your role(s) within the cloned repo
# The absolute path to the specific role directory within the cloned repository.
# Constructed from the above variables.
role_absolute_path: "{{ repo_clone_dest }}/{{ role_base_dir_in_repo }}/{{ role_name }}"
# --- PLAYBOOK BEHAVIOR FLAGS ---
# Set to 'true' to clean up the cloned repository after the role has run.
ansible_cleanup_repo: true # Set to 'false' if you want to keep the cloned repo for inspection/caching
tasks:
- name: Ensure the target directory for repository cloning exists
ansible.builtin.file:
path: "{{ repo_clone_dest }}"
state: directory
mode: '0755'
recurse: yes
tags: setup
- name: Clone or update the Git repository
ansible.builtin.git:
repo: "{{ repo_url }}"
dest: "{{ repo_clone_dest }}"
version: main
force: yes
register: git_clone_result
tags: git
- name: Debug - Repository cloning status
ansible.builtin.debug:
msg: "Repository cloned to '{{ repo_clone_dest }}'. Changed: {{ git_clone_result.changed }}"
tags: git
- name: Verify that the specified role directory exists within the cloned repository
ansible.builtin.stat:
path: "{{ role_absolute_path }}"
register: role_dir_stat
tags: validation
- name: Fail the playbook if the role directory was not found
ansible.builtin.fail:
msg: "ERROR: The specified role directory '{{ role_absolute_path }}' does not exist or is not a directory within the cloned repository. Please check 'role_name' and 'role_base_dir_in_repo' variables, and verify the repository structure."
when: not role_dir_stat.stat.exists or not role_dir_stat.stat.isdir
tags: validation
- name: Add the cloned role path to roles_path
set_fact:
ansible_roles_path: "{{ role_absolute_path }}"
tags: run_role
- name: Run the specified Ansible role from the cloned repository
ansible.builtin.include_role:
name: "{{ role_name }}"
vars:
# Ajoute ici les variables spécifiques à ton rôle si besoin
# nginx_port: 8080
# app_env: "production"
tags: run_role
- name: Clean up the cloned repository (optional)
ansible.builtin.file:
path: "{{ repo_clone_dest }}"
state: absent
when: ansible_cleanup_repo | default(false) | bool
tags: cleanup