我已经弄清楚如何使用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
提供选项感到困惑。我看到有一个选择标志,但我不太确定这看起来如何。
答案 0 :(得分:5)
我没有亲自使用过mount模块,但从文档中看起来你想做的事情如下:
- 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输出。如果它不起作用,那么调试输出应该给你一个相当不错的想法如何继续。
答案 1 :(得分:5)
这是我最终的命令:
- 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
答案 2 :(得分:4)
扩展@ adam-kalnas回答:
创建fstab条目然后调用mount将允许您以更合适的权限级别(即不是0777)挂载文件系统。通过执行state: present
ansible只会在/ etc / fstab中创建条目,然后可以由用户安装。来自ansible mount module documentation:
absent
和present
仅处理fstab,但不会影响当前 安装。
此外,您还希望避免在/ 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