Ansible挂载不同服务器上的不同目录

Ansible mount for different directories on different servers

我们在 /etc/fstab 文件中为不同的服务器配置了不同的挂载点。我怎样才能使用 Ansible 实现同样的目标?

例如:

服务器 A 有一个 source node1:/data/col1/RMAN 安装在 path /mountPointA

以上我们可以使用Ansible的挂载模块实现如


- name: Add Mount Points
mount:
  path: /mnt/dvd
  src : /dev/sr0
  fstype: iso09660
  opts: ro
  boot: yes
  state: present

BUT

如果我有另一个 服务器 "B"source /node1:/data/col1/directoryB 需要安装在 路径/mountPointB。但是这个服务器不需要配置第一个挂载点。

是否可以在单个yml文件中实现?

换句话说

Host      source                   dest

hostA    /source/directoryA     /mnt

hostB    /source/directoryB     /mnt or /mnt/subdirectory #assuming subdir exists

我希望这是有道理的。对困惑感到抱歉。此剧本将 运行 用于大部分主机,我如何确保自动选择正确的主机以使用正确的挂载点

有多种方法可以解决这个问题。如果您愿意,我将建议一种方法,让您可以为每个主机定义多个挂载点。如果你有一个 host_vars 目录和你的剧本在同一个地方,Ansible 会在那里寻找以你的主机命名的文件,并从这些文件加载​​变量。例如,如果您的清单中有一个名为 serverA 的主机,Ansible 将查找 host_vars/serverA.yml.

我们将利用它来指定每个主机的装载配置。创建一个文件 host_vars/serverA.yml 包含:

mountinfo:
  - src: node1:/data/col1/RMAN
    dst: /mountpointA
    fstype: nfs

并创建 host_vars/serverB.yml

mountinfo:
  - src: node1:/data/col1/directoryB
    dst: /mountpointB
    fstype: nfs

然后在你的剧本中:

- name: Add Mount Points
  mount:
    path: "{{ item.dst }}"
    src : "{{ item.src }}"
    fstype: "{{ item.fstype }}"
    opts: ro
    boot: yes
    state: present
  with_items: "{{ mountinfo }}"
  when: mountinfo is defined

如果这个答案中的某些内容不清楚,我将上面的内容总结为一个可运行的示例 here