add tracearr lxc and docker install
This commit is contained in:
@@ -1,35 +1,94 @@
|
||||
- name: Create Docker ready LXC
|
||||
---
|
||||
# Playbook: create-docker-lxc.yml
|
||||
#
|
||||
# But:
|
||||
# - Creer un conteneur LXC Proxmox pret pour Docker
|
||||
# - Activer les options necessaires pour Docker dans LXC
|
||||
# - Installer les paquets de base
|
||||
# - Creer un utilisateur ansible
|
||||
# - Ajouter la cle SSH de ansible-srv
|
||||
# - Ajouter automatiquement le nouveau LXC dans inventory/hosts.ini
|
||||
#
|
||||
# Exemple:
|
||||
# ansible-playbook -i inventory/hosts.ini playbooks/create-docker-lxc.yml \
|
||||
# -e target_node=pve02 \
|
||||
# -e lxc_ctid=102 \
|
||||
# -e lxc_hostname=tracearr \
|
||||
# -e lxc_ip=10.100.5.102/24 \
|
||||
# -e lxc_gateway=10.100.5.1 \
|
||||
# -e lxc_memory=2048 \
|
||||
# -e lxc_swap=1024 \
|
||||
# -e lxc_disk=20 \
|
||||
# -e lxc_inventory_group=tracearr_servers
|
||||
|
||||
- name: Creer un LXC pret pour Docker
|
||||
hosts: "{{ target_node }}"
|
||||
become: false
|
||||
gather_facts: false
|
||||
|
||||
vars:
|
||||
# Identite du conteneur LXC
|
||||
lxc_ctid: 900
|
||||
lxc_hostname: docker-test
|
||||
|
||||
# Configuration reseau du conteneur
|
||||
lxc_ip: 10.100.5.90/24
|
||||
lxc_gateway: 10.100.5.1
|
||||
lxc_bridge: vmbr0
|
||||
|
||||
# Stockages Proxmox
|
||||
# lxc_storage: stockage ou sera cree le disque du conteneur
|
||||
# lxc_template_storage: stockage ou se trouve le template LXC
|
||||
lxc_storage: proxmox-data-nfs
|
||||
lxc_template_storage: proxmox-data-nfs
|
||||
|
||||
# Template Debian utilise pour creer le conteneur
|
||||
lxc_template: debian-13-standard_13.1-2_amd64.tar.zst
|
||||
|
||||
# Ressources du conteneur
|
||||
lxc_cores: 1
|
||||
lxc_memory: 512
|
||||
lxc_swap: 512
|
||||
lxc_disk: 8
|
||||
|
||||
# IP du serveur Ansible
|
||||
# Cette IP sera utilisee dans authorized_keys pour limiter la cle SSH
|
||||
ansible_controller_ip: 10.100.5.100
|
||||
|
||||
# Fichier inventaire a mettre a jour automatiquement
|
||||
lxc_inventory_file: "{{ playbook_dir }}/../inventory/hosts.ini"
|
||||
|
||||
# Groupe Ansible ajoute dans inventory/hosts.ini
|
||||
# Exemple:
|
||||
# lxc_hostname=tracearr -> tracearr_servers
|
||||
lxc_inventory_group: "{{ lxc_hostname | replace('-', '_') }}_servers"
|
||||
|
||||
# Parametres Ansible du futur conteneur
|
||||
lxc_ansible_user: ansible
|
||||
lxc_ansible_python_interpreter: /usr/bin/python3
|
||||
|
||||
# IP sans le /24
|
||||
# Exemple: 10.100.5.102/24 -> 10.100.5.102
|
||||
lxc_ip_address: "{{ lxc_ip.split('/')[0] }}"
|
||||
|
||||
tasks:
|
||||
- name: Check if CT already exists
|
||||
# On verifie que le CTID n'existe pas deja.
|
||||
# Le playbook s'arrete si le conteneur existe deja pour eviter
|
||||
# d'ecraser un service existant.
|
||||
- name: Verifier si le CT existe deja
|
||||
command: pct status {{ lxc_ctid }}
|
||||
register: ct_status
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
|
||||
- name: Stop if CT already exists
|
||||
- name: Arreter si le CT existe deja
|
||||
fail:
|
||||
msg: "CT {{ lxc_ctid }} already exists on this node. Stop to avoid overwrite."
|
||||
when: ct_status.rc == 0
|
||||
|
||||
- name: Copy ansible public key to Proxmox node
|
||||
# On copie la cle publique de ansible-srv sur le noeud Proxmox.
|
||||
# Elle sera injectee dans le compte root du LXC au moment du pct create.
|
||||
- name: Copier la cle publique Ansible sur le noeud Proxmox
|
||||
copy:
|
||||
content: "{{ lookup('file', '/root/.ssh/id_ed25519.pub') }}"
|
||||
dest: /tmp/ansible-srv.pub
|
||||
@@ -37,7 +96,20 @@
|
||||
group: root
|
||||
mode: "0600"
|
||||
|
||||
- name: Create LXC container
|
||||
# Creation du conteneur LXC.
|
||||
#
|
||||
# --unprivileged 1:
|
||||
# conteneur non privilegie, plus securise
|
||||
#
|
||||
# --features nesting=1,keyctl=1:
|
||||
# options necessaires pour faire tourner Docker dans un LXC
|
||||
#
|
||||
# --ssh-public-keys:
|
||||
# ajoute la cle SSH dans le LXC lors de la creation
|
||||
#
|
||||
# --start 1:
|
||||
# demarre le conteneur directement apres creation
|
||||
- name: Creer le conteneur LXC
|
||||
command: >
|
||||
pct create {{ lxc_ctid }}
|
||||
{{ lxc_template_storage }}:vztmpl/{{ lxc_template }}
|
||||
@@ -54,43 +126,63 @@
|
||||
--start 1
|
||||
register: create_result
|
||||
|
||||
- name: Show create result
|
||||
- name: Afficher le resultat de creation
|
||||
debug:
|
||||
var: create_result.stdout_lines
|
||||
|
||||
- name: Wait a few seconds after first boot
|
||||
# Petite pause pour laisser le conteneur terminer son premier demarrage.
|
||||
- name: Attendre le premier demarrage
|
||||
pause:
|
||||
seconds: 10
|
||||
|
||||
- name: Update package cache inside CT
|
||||
# Mise a jour du cache APT dans le conteneur.
|
||||
- name: Mettre a jour le cache APT dans le CT
|
||||
command: pct exec {{ lxc_ctid }} -- apt update
|
||||
changed_when: false
|
||||
|
||||
- name: Install base packages inside CT
|
||||
# Installation des paquets minimums.
|
||||
#
|
||||
# openssh-server: acces SSH
|
||||
# sudo: elevation de privileges pour Ansible
|
||||
# python3: obligatoire pour les modules Ansible
|
||||
# curl/gnupg/ca-certificates: utiles pour installer Docker ensuite
|
||||
# nano: edition manuelle si besoin
|
||||
- name: Installer les paquets de base dans le CT
|
||||
command: >
|
||||
pct exec {{ lxc_ctid }} --
|
||||
apt install -y openssh-server sudo python3 curl ca-certificates gnupg nano
|
||||
changed_when: true
|
||||
|
||||
- name: Enable SSH inside CT
|
||||
- name: Activer SSH dans le CT
|
||||
command: pct exec {{ lxc_ctid }} -- systemctl enable --now ssh
|
||||
changed_when: true
|
||||
|
||||
- name: Create ansible user inside CT
|
||||
# Creation de l'utilisateur ansible.
|
||||
# Cet utilisateur sera utilise pour piloter le LXC via SSH.
|
||||
- name: Creer l utilisateur ansible dans le CT
|
||||
command: pct exec {{ lxc_ctid }} -- bash -c "id ansible || useradd -m -s /bin/bash ansible"
|
||||
changed_when: true
|
||||
|
||||
- name: Create ansible ssh directory inside CT
|
||||
- name: Creer le dossier SSH de l utilisateur ansible
|
||||
command: pct exec {{ lxc_ctid }} -- mkdir -p /home/ansible/.ssh
|
||||
changed_when: true
|
||||
|
||||
- name: Add ansible public key inside CT
|
||||
# Ajout de la cle publique Ansible dans authorized_keys.
|
||||
#
|
||||
# from="10.100.5.100":
|
||||
# la cle SSH ne peut etre utilisee que depuis ansible-srv
|
||||
#
|
||||
# no-agent-forwarding / no-X11-forwarding / no-port-forwarding:
|
||||
# limite les usages possibles de cette cle
|
||||
- name: Ajouter la cle publique Ansible dans le CT
|
||||
command: >
|
||||
pct exec {{ lxc_ctid }} -- bash -c
|
||||
'echo "from=\"10.100.5.100\",no-agent-forwarding,no-X11-forwarding,no-port-forwarding {{ lookup("file", "/root/.ssh/id_ed25519.pub") }}" > /home/ansible/.ssh/authorized_keys'
|
||||
'echo "from=\"{{ ansible_controller_ip }}\",no-agent-forwarding,no-X11-forwarding,no-port-forwarding {{ lookup("file", "/root/.ssh/id_ed25519.pub") }}" > /home/ansible/.ssh/authorized_keys'
|
||||
changed_when: true
|
||||
|
||||
- name: Fix ssh permissions inside CT
|
||||
# Permissions SSH strictes.
|
||||
# Sans ces permissions, SSH peut refuser la cle.
|
||||
- name: Corriger les permissions SSH dans le CT
|
||||
command: >
|
||||
pct exec {{ lxc_ctid }} -- bash -c
|
||||
"chown -R ansible:ansible /home/ansible/.ssh &&
|
||||
@@ -98,22 +190,53 @@
|
||||
chmod 600 /home/ansible/.ssh/authorized_keys"
|
||||
changed_when: true
|
||||
|
||||
- name: Configure sudo for ansible user inside CT
|
||||
# Sudo sans mot de passe pour Ansible.
|
||||
# Necessaire pour que les playbooks puissent installer Docker,
|
||||
# copier des fichiers dans /opt/stacks et gerer les services.
|
||||
#
|
||||
# Plus tard, on pourra reduire ces droits.
|
||||
- name: Configurer sudo pour l utilisateur ansible
|
||||
command: >
|
||||
pct exec {{ lxc_ctid }} -- bash -c
|
||||
"echo 'ansible ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/ansible &&
|
||||
chmod 440 /etc/sudoers.d/ansible"
|
||||
changed_when: true
|
||||
|
||||
- name: Check sudoers file inside CT
|
||||
# Verification de la syntaxe sudoers.
|
||||
# Important: une erreur sudoers peut casser sudo.
|
||||
- name: Verifier le fichier sudoers dans le CT
|
||||
command: pct exec {{ lxc_ctid }} -- visudo -cf /etc/sudoers.d/ansible
|
||||
changed_when: false
|
||||
|
||||
- name: Show final CT status
|
||||
# On attend que le port SSH du nouveau LXC soit accessible
|
||||
# depuis ansible-srv.
|
||||
- name: Attendre SSH depuis ansible-srv
|
||||
wait_for:
|
||||
host: "{{ lxc_ip_address }}"
|
||||
port: 22
|
||||
timeout: 120
|
||||
delegate_to: localhost
|
||||
become: false
|
||||
|
||||
# Ajout automatique du nouveau LXC dans inventory/hosts.ini.
|
||||
#
|
||||
# blockinfile evite les doublons:
|
||||
# si le bloc existe deja, il est mis a jour.
|
||||
- name: Ajouter le nouveau LXC dans l inventaire Ansible
|
||||
blockinfile:
|
||||
path: "{{ lxc_inventory_file }}"
|
||||
marker: "# {mark} ANSIBLE MANAGED {{ lxc_hostname }}"
|
||||
block: |
|
||||
[{{ lxc_inventory_group }}]
|
||||
{{ lxc_hostname }} ansible_host={{ lxc_ip_address }} ansible_user={{ lxc_ansible_user }} ansible_python_interpreter={{ lxc_ansible_python_interpreter }}
|
||||
delegate_to: localhost
|
||||
become: false
|
||||
|
||||
- name: Verifier le statut final du CT
|
||||
command: pct status {{ lxc_ctid }}
|
||||
register: final_status
|
||||
changed_when: false
|
||||
|
||||
- name: Show final status
|
||||
- name: Afficher le statut final du CT
|
||||
debug:
|
||||
var: final_status.stdout
|
||||
var: final_status.stdout
|
||||
97
playbooks/install_docker.yml
Normal file
97
playbooks/install_docker.yml
Normal file
@@ -0,0 +1,97 @@
|
||||
---
|
||||
# Playbook: install-docker.yml
|
||||
#
|
||||
# But:
|
||||
# - Installer Docker Engine dans un LXC Debian
|
||||
# - Installer le plugin Docker Compose
|
||||
# - Activer le service Docker
|
||||
# - Ajouter l utilisateur ansible au groupe docker
|
||||
|
||||
- name: Installer Docker Engine
|
||||
hosts: "{{ target_group | default('docker_hosts') }}"
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
tasks:
|
||||
- name: Supprimer les paquets Docker conflictuels
|
||||
apt:
|
||||
name:
|
||||
- docker.io
|
||||
- docker-compose
|
||||
- docker-doc
|
||||
- podman-docker
|
||||
state: absent
|
||||
failed_when: false
|
||||
|
||||
- name: Installer les paquets requis
|
||||
apt:
|
||||
name:
|
||||
- ca-certificates
|
||||
- curl
|
||||
- gnupg
|
||||
state: present
|
||||
update_cache: true
|
||||
|
||||
- name: Creer le dossier apt keyrings
|
||||
file:
|
||||
path: /etc/apt/keyrings
|
||||
state: directory
|
||||
mode: "0755"
|
||||
|
||||
- name: Telecharger la cle GPG Docker
|
||||
get_url:
|
||||
url: https://download.docker.com/linux/debian/gpg
|
||||
dest: /etc/apt/keyrings/docker.asc
|
||||
mode: "0644"
|
||||
|
||||
- name: Ajouter le depot apt Docker
|
||||
copy:
|
||||
dest: /etc/apt/sources.list.d/docker.sources
|
||||
mode: "0644"
|
||||
content: |
|
||||
Types: deb
|
||||
URIs: https://download.docker.com/linux/debian
|
||||
Suites: {{ ansible_distribution_release }}
|
||||
Components: stable
|
||||
Signed-By: /etc/apt/keyrings/docker.asc
|
||||
|
||||
- name: Installer les paquets Docker
|
||||
apt:
|
||||
name:
|
||||
- docker-ce
|
||||
- docker-ce-cli
|
||||
- containerd.io
|
||||
- docker-buildx-plugin
|
||||
- docker-compose-plugin
|
||||
state: present
|
||||
update_cache: true
|
||||
|
||||
- name: Activer et demarrer Docker
|
||||
service:
|
||||
name: docker
|
||||
enabled: true
|
||||
state: started
|
||||
|
||||
- name: Ajouter ansible au groupe docker
|
||||
user:
|
||||
name: ansible
|
||||
groups: docker
|
||||
append: true
|
||||
|
||||
- name: Verifier la version Docker
|
||||
command: docker --version
|
||||
register: docker_version
|
||||
changed_when: false
|
||||
|
||||
- name: Afficher la version Docker
|
||||
debug:
|
||||
var: docker_version.stdout
|
||||
|
||||
- name: Verifier la version Docker Compose
|
||||
command: docker compose version
|
||||
register: compose_version
|
||||
changed_when: false
|
||||
|
||||
- name: Afficher la version Docker Compose
|
||||
debug:
|
||||
var: compose_version.stdout
|
||||
Reference in New Issue
Block a user