Ansible安装在不同服务器上的不同目录

时间:2017-09-29 15:40:42

标签: ansible mount-point

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

例如:

服务器A在路径 node1:/data/col1/RMAN

处安装来源 /mountPointA

以上我们可以使用Ansible的安装模块,如

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

BUT

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

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

换句话说

Host      source                   dest

hostA    /source/directoryA     /mnt

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

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

1 个答案:

答案 0 :(得分:1)

有很多方法可以解决这个问题。如果您愿意,我将建议一种可以让您为每个主机定义多个挂载点的方法。如果您在与Playbook相同的位置有一个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进行了整理。