From afa115e17ac2fee93fcd3b6ac65af104c488698b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=2E=20Nam=C3=A8che?= Date: Mon, 19 Jan 2026 16:07:13 +0300 Subject: [PATCH] Add NFS server/clients for share Wordpress --- ansible/inventory/groups.yml | 4 +++ ansible/play-main.yml | 30 ++++++++++++++++++ ansible/roles/nfs_client/defaults/main.yml | 8 +++++ ansible/roles/nfs_client/tasks/main.yml | 23 ++++++++++++++ ansible/roles/nfs_server/defaults/main.yml | 9 ++++++ ansible/roles/nfs_server/handlers/main.yml | 5 +++ ansible/roles/nfs_server/tasks/main.yml | 36 ++++++++++++++++++++++ ansible/roles/nfs_server/templates/exports | 3 ++ ansible/roles/wordpress/defaults/main.yml | 1 + ansible/roles/wordpress/tasks/main.yml | 12 +++++++- tofu/infra.auto.tfvars | 1 + 11 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 ansible/roles/nfs_client/defaults/main.yml create mode 100644 ansible/roles/nfs_client/tasks/main.yml create mode 100644 ansible/roles/nfs_server/defaults/main.yml create mode 100644 ansible/roles/nfs_server/handlers/main.yml create mode 100644 ansible/roles/nfs_server/tasks/main.yml create mode 100644 ansible/roles/nfs_server/templates/exports diff --git a/ansible/inventory/groups.yml b/ansible/inventory/groups.yml index b88f7d1..7f9cd35 100644 --- a/ansible/inventory/groups.yml +++ b/ansible/inventory/groups.yml @@ -16,6 +16,10 @@ mysql: hosts: mysql1: +nfs: + hosts: + nfs1: + www: hosts: www1: diff --git a/ansible/play-main.yml b/ansible/play-main.yml index d9d0110..b64855a 100644 --- a/ansible/play-main.yml +++ b/ansible/play-main.yml @@ -154,6 +154,29 @@ tags: - "mysql" +- name: NFS servers + hosts: nfs + gather_facts: false + vars_files: + - "vars/common.yml" + - "vars/secrets.yml" + vars: + nfs_server_exports: + - path: "/srv/wordpress" + owner: 1001 + group: 33 + clients: + - address: "www1" + options: "rw,no_root_squash" + - address: "www2" + options: "rw,no_root_squash" + - address: "www3" + options: "rw,no_root_squash" + roles: + - "nfs_server" + tags: + - "nfs" + - name: HTTP Servers hosts: www gather_facts: false @@ -172,6 +195,12 @@ - "DNS:{{ ansible_fqdn }}" - "DNS:{{ ansible_hostname }}" - "IP:{{ ansible_default_ipv4.address }}" + nfs_client_mounts: + - mount_point: "/var/www/wordpress" + server: "nfs1:/srv/wordpress" + owner: 1001 + group: 33 + wordpress_create_master: "www1" wordpress_site: "test.lab" wordpress_url: "test.lab" wordpress_site_title: "Lab Test" @@ -194,6 +223,7 @@ check_http: "http://localhost:80/" roles: - "local_ca_certs" + - "nfs_client" - "wordpress" - "consul" tags: diff --git a/ansible/roles/nfs_client/defaults/main.yml b/ansible/roles/nfs_client/defaults/main.yml new file mode 100644 index 0000000..a763142 --- /dev/null +++ b/ansible/roles/nfs_client/defaults/main.yml @@ -0,0 +1,8 @@ +# Required +nfs_client_mounts: [] +# - mount_point: +# server: +# options: (default "rw,sync,hard") +# owner: +# group: +# mode: (default "0750") diff --git a/ansible/roles/nfs_client/tasks/main.yml b/ansible/roles/nfs_client/tasks/main.yml new file mode 100644 index 0000000..755daea --- /dev/null +++ b/ansible/roles/nfs_client/tasks/main.yml @@ -0,0 +1,23 @@ +- name: Installation de NFS Common + ansible.builtin.apt: + name: + - "nfs-common" + +- name: Création des points de montage + loop: "{{ nfs_client_mounts }}" + ansible.builtin.file: + path: "{{ item.mount_point }}" + state: "directory" + owner: "{{ item.owner }}" + group: "{{ item.group }}" + mode: "{{ item.mode | default('0750') }}" + +- name: Mount filesystems + loop: "{{ nfs_client_mounts }}" + ansible.posix.mount: + path: "{{ item.mount_point }}" + src: "{{ item.server }}" + fstype: "nfs4" + opts: "{{ item.options | default('rw,sync,hard') }}" + state: "mounted" + boot: true diff --git a/ansible/roles/nfs_server/defaults/main.yml b/ansible/roles/nfs_server/defaults/main.yml new file mode 100644 index 0000000..d1e601f --- /dev/null +++ b/ansible/roles/nfs_server/defaults/main.yml @@ -0,0 +1,9 @@ +# Required +nfs_server_exports: [] +# - path: +# owner: +# group: +# mode: (default "0750") +# clients: +# - address: +# options: (default "ro") diff --git a/ansible/roles/nfs_server/handlers/main.yml b/ansible/roles/nfs_server/handlers/main.yml new file mode 100644 index 0000000..8158322 --- /dev/null +++ b/ansible/roles/nfs_server/handlers/main.yml @@ -0,0 +1,5 @@ +- name: Restart NFS-Server + ansible.builtin.service: + name: "nfs-kernel-server" + enabled: true + state: "restarted" diff --git a/ansible/roles/nfs_server/tasks/main.yml b/ansible/roles/nfs_server/tasks/main.yml new file mode 100644 index 0000000..00f03c9 --- /dev/null +++ b/ansible/roles/nfs_server/tasks/main.yml @@ -0,0 +1,36 @@ +- name: Installation du serveur NFS + ansible.builtin.apt: + name: + - "nfs-kernel-server" + notify: + - "Restart NFS-Server" + +- name: Activation de NFS 4 + ansible.builtin.lineinfile: + dest: "/etc/nfs.conf" + regex: "{{ item.regex }}" + line: "{{ item.line }}" + loop: + - regex: "vers3=y" + line: "vers3=n" + - regex: "vers4=y" + line: "vers4=y" + notify: + - "Restart NFS-Server" + +- name: Création des répertoires exportés + loop: "{{ nfs_server_exports }}" + ansible.builtin.file: + path: "{{ item.path }}" + state: "directory" + owner: "{{ item.owner }}" + group: "{{ item.group }}" + mode: "{{ item.mode | default('750') }}" + +- name: Copie du fichier exports + ansible.builtin.template: + src: "templates/exports" + dest: "/etc/exports" + mode: "0644" + notify: + - "Restart NFS-Server" diff --git a/ansible/roles/nfs_server/templates/exports b/ansible/roles/nfs_server/templates/exports new file mode 100644 index 0000000..b1f0044 --- /dev/null +++ b/ansible/roles/nfs_server/templates/exports @@ -0,0 +1,3 @@ +{% for export in nfs_server_exports %} +{{ export.path }}{% for c in export.clients %} {{ c.address }}({{ c.options | default ("ro") }}){% endfor %} +{% endfor %} diff --git a/ansible/roles/wordpress/defaults/main.yml b/ansible/roles/wordpress/defaults/main.yml index 1a38431..aa4c97f 100644 --- a/ansible/roles/wordpress/defaults/main.yml +++ b/ansible/roles/wordpress/defaults/main.yml @@ -21,3 +21,4 @@ wordpress_db_charset: "utf8mb4" # Optionnal wordpress_import_ocdi_indexes: [] +wordpress_create_master: null diff --git a/ansible/roles/wordpress/tasks/main.yml b/ansible/roles/wordpress/tasks/main.yml index 8c0b28f..de6d045 100644 --- a/ansible/roles/wordpress/tasks/main.yml +++ b/ansible/roles/wordpress/tasks/main.yml @@ -12,6 +12,7 @@ - "zip" - name: Installation de wp-cli + when: "wordpress_create_master != None and wordpress_create_master == ansible_hostname" ansible.builtin.get_url: url: "https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar" dest: "/usr/local/bin/wp" @@ -37,6 +38,7 @@ mode: "0750" - name: Installation de Wordpress + when: "wordpress_create_master != None and wordpress_create_master == ansible_hostname" become: true become_user: "{{ wordpress_user }}" ansible.builtin.command: @@ -46,6 +48,7 @@ # TODO: https://make.wordpress.org/cli/handbook/references/config/#config-files - name: Configuration de Wordpress + when: "wordpress_create_master != None and wordpress_create_master == ansible_hostname" become: true become_user: "{{ wordpress_user }}" ansible.builtin.shell: @@ -78,9 +81,9 @@ - "Flush Wordpress" - name: Create Wordpress database tables + when: "wordpress_create_master != None and wordpress_create_master == ansible_hostname" become: true become_user: "{{ wordpress_user }}" - run_once: true ansible.builtin.command: chdir: "/var/www/{{ wordpress_user }}/{{ wordpress_site }}" cmd: > @@ -99,6 +102,7 @@ - "Flush Wordpress" - name: Installation des thèmes Wordpress + when: "wordpress_create_master != None and wordpress_create_master == ansible_hostname" become: true become_user: "{{ wordpress_user }}" loop: "{{ wordpress_themes }}" @@ -112,6 +116,7 @@ - "Flush Wordpress" - name: Activation du thème Wordpress + when: "wordpress_create_master != None and wordpress_create_master == ansible_hostname" become: true become_user: "{{ wordpress_user }}" ansible.builtin.command: @@ -123,6 +128,7 @@ - "Flush Wordpress" - name: Installation des plugins wordpress-importer et one-click-demo-import + when: "wordpress_create_master != None and wordpress_create_master == ansible_hostname" vars: wordpress_plugins_to_install: - "wordpress-importer" @@ -130,6 +136,7 @@ ansible.builtin.include_tasks: "install_plugins.yml" - name: Importation des plugins OCDI + when: "wordpress_create_master != None and wordpress_create_master == ansible_hostname" become: true become_user: "{{ wordpress_user }}" loop: "{{ wordpress_import_ocdi_indexes }}" @@ -147,11 +154,13 @@ - "Flush Wordpress" - name: Installation des plugins Wordpress + when: "wordpress_create_master != None and wordpress_create_master == ansible_hostname" vars: wordpress_plugins_to_install: "{{ wordpress_plugins }}" ansible.builtin.include_tasks: "install_plugins.yml" - name: Création du répertoire cache de Wordpress + when: "wordpress_create_master != None and wordpress_create_master == ansible_hostname" ansible.builtin.file: path: "/var/www/{{ wordpress_user }}/{{ wordpress_site }}/wp-content/cache" state: "directory" @@ -160,6 +169,7 @@ mode: "0750" - name: Apply permissions + when: "wordpress_create_master != None and wordpress_create_master == ansible_hostname" loop: - "uploads" - "cache" diff --git a/tofu/infra.auto.tfvars b/tofu/infra.auto.tfvars index 9145e25..ba8263d 100644 --- a/tofu/infra.auto.tfvars +++ b/tofu/infra.auto.tfvars @@ -3,6 +3,7 @@ vms = { waf2 = {}, waf3 = {}, mysql1 = {}, + nfs1 = {}, www1 = {}, www2 = {}, www3 = {},