您如何向 ansible 挂载模块提供域凭据?

How do you provide domain credentials to ansible's mount module?

我已经弄清楚如何使用 shell 模块使用以下命令在网络上创建安装:

- name: mount image folder share
  shell: "mount -t cifs -o domain=MY_DOMAIN,username=USER,password=PASSWORD  //network_path/folder /local_path/folder
  sudo_user: root
  args:
    executable: /bin/bash

但使用 Ansible's mount module 做同样的事情似乎更好。

具体来说,我对为 domain=MY_DOMAIN,username=USER,password=PASSWORD 提供选项感到困惑。我看到有一个 opts 标志,但我不太确定它会是什么样子。

我个人没有使用过挂载模块,但从文档来看,您可能想要执行以下操作:

- name: mount image folder share
  mount: fstype="cifs"
         opts="domain=MY_DOMAIN,username=USER,password=PASSWORD"
         src="//network_path/folder"
         name="/local_path/folder"

我会试一试,然后 运行 它使用 -vvvv 查看所有 ansible 输出。如果它不起作用,那么调试输出应该让您对如何继续有一个相当不错的想法。

这是我最终使用的命令:

- name: mount product image folder share
  mount: state="present" 
  fstype="cifs" 
  opts="domain= MY_DOMAIN,username=USER,password=PASSWORD,file_mode=0777,dir_mode=0777" src="//network_path/folder" name="/local_path/folder"
  sudo_user: root
  sudo: yes

一些注意事项:

  1. 我认为 file_mode=0777,dir_mode=0777 不是必需的,但在我的情况下,为了让我具有对该文件夹的写入权限,需要它。我可以在不指定权限的情况下读取文件夹,但无法写入。

  2. 这个片段是必需的,不是因为 this ansible bug 我在 1.9.0 和 1.9.1 上测试过,这在两个版本中都是一个问题。
    sudo_user: root sudo: yes

扩展@adam-kalnas 的回答:

创建一个 fstab 条目然后调用 mount 将允许您以更合适的权限级别(即不是 0777)挂载文件系统。通过执行 state: present ansible 只会在 /etc/fstab 中创建条目,然后可以由用户安装。来自 ansible mount module documentation:

absent and present only deal with fstab but will not affect current mounting.

此外,您希望避免在 /etc/fstab 文件中留下凭据(因为它对所有人、人员或服务都可读)。为避免这种情况,请创建一个适当保护的凭据文件。

全部看起来像这样:

- name: Create credential file (used for fstab entry)
  copy:
    content: |
      username=USER
      password=PASSWORD
    dest: /home/myusername/.credential
    mode: 0600
  become: true
  become_user: myusername

- name: Create fstab entry for product image folder share
  mount: 
    state: present 
    fstype: cifs 
    opts: "credentials=/home/myusername/.credential,file_mode=0755,dir_mode=0755,user" 
    src="//network_path/folder" 
    path="/local_path/folder"
  become: true

- name: Mount product image folder share
  shell: |
    mount "/local_path/folder"
  become: true
  become_user: myusername