您如何向 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
一些注意事项:
我认为 file_mode=0777,dir_mode=0777
不是必需的,但在我的情况下,为了让我具有对该文件夹的写入权限,需要它。我可以在不指定权限的情况下读取文件夹,但无法写入。
这个片段是必需的,不是因为 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
我已经弄清楚如何使用 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
一些注意事项:
我认为
file_mode=0777,dir_mode=0777
不是必需的,但在我的情况下,为了让我具有对该文件夹的写入权限,需要它。我可以在不指定权限的情况下读取文件夹,但无法写入。这个片段是必需的,不是因为 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
andpresent
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