添加 Ansible 配置文件和多个主机清单文件
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
---
|
||||
- hosts: fnos
|
||||
gather_facts: no
|
||||
become: yes
|
||||
vars:
|
||||
src_bases:
|
||||
fn-home: "/vol00/HGST HSH721414ALE6M4"
|
||||
fn-tower: "/vol00/HSH721414ALN6M0"
|
||||
tasks:
|
||||
- name: Deploy fixed auto-bind script
|
||||
ansible.builtin.copy:
|
||||
dest: /usr/local/bin/auto-bind-same-dirs.sh
|
||||
mode: "0755"
|
||||
content: |
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
SRC_BASE="{{ src_bases[inventory_hostname] }}"
|
||||
DST_BASE="/vol1/1000"
|
||||
LOG_TAG="auto-bind-same-dirs"
|
||||
|
||||
logger -t "$LOG_TAG" "start"
|
||||
|
||||
if [ ! -d "$SRC_BASE" ]; then
|
||||
logger -t "$LOG_TAG" "source base not found: $SRC_BASE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ ! -d "$DST_BASE" ]; then
|
||||
logger -t "$LOG_TAG" "target base not found: $DST_BASE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
find "$DST_BASE" -mindepth 1 -maxdepth 1 -type d | while read -r dst_dir; do
|
||||
name="$(basename "$dst_dir")"
|
||||
src_dir="$SRC_BASE/$name"
|
||||
|
||||
if [ -d "$src_dir" ]; then
|
||||
if mountpoint -q "$dst_dir" && stat "$dst_dir/." >/dev/null 2>&1; then
|
||||
logger -t "$LOG_TAG" "skip already mounted: $dst_dir"
|
||||
else
|
||||
umount "$dst_dir" 2>/dev/null || true
|
||||
mount --bind "$src_dir" "$dst_dir"
|
||||
logger -t "$LOG_TAG" "mounted $src_dir -> $dst_dir"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
logger -t "$LOG_TAG" "done"
|
||||
exit 0
|
||||
|
||||
- name: Deploy service unit
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/systemd/system/auto-bind-same-dirs.service
|
||||
mode: "0644"
|
||||
content: |
|
||||
[Unit]
|
||||
Description=Bind mount NAS directories
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/local/bin/auto-bind-same-dirs.sh
|
||||
|
||||
- name: Deploy timer unit
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/systemd/system/auto-bind-same-dirs.timer
|
||||
mode: "0644"
|
||||
content: |
|
||||
[Unit]
|
||||
Description=Periodic bind mount check for external disks
|
||||
|
||||
[Timer]
|
||||
OnBootSec=15s
|
||||
OnUnitActiveSec=60s
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
|
||||
- name: Stop and disable old path unit
|
||||
ansible.builtin.systemd:
|
||||
name: auto-bind-same-dirs.path
|
||||
state: stopped
|
||||
enabled: false
|
||||
failed_when: false
|
||||
|
||||
- name: Remove old path unit file
|
||||
ansible.builtin.file:
|
||||
path: /etc/systemd/system/auto-bind-same-dirs.path
|
||||
state: absent
|
||||
|
||||
- name: systemd daemon-reload
|
||||
ansible.builtin.systemd:
|
||||
daemon_reload: true
|
||||
|
||||
- name: Reset any failed state on auto-bind units
|
||||
ansible.builtin.command:
|
||||
cmd: systemctl reset-failed auto-bind-same-dirs.service auto-bind-same-dirs.timer
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
|
||||
- name: Enable and start timer
|
||||
ansible.builtin.systemd:
|
||||
name: auto-bind-same-dirs.timer
|
||||
enabled: true
|
||||
state: started
|
||||
Reference in New Issue
Block a user