我正在尝试使用Ansible创建一个Vagrant VM。我想在我的管理节点上的一个名为" project"的文件夹中找到我的网站。它与我的Ansible playbook和Vagrantfile位于同一目录中。我希望Vagrant在配置它时将此目录作为/ srv / http / ticker安装在(远程)VM上,但我也希望该目录由" ticker" user:group,就像我在我的生产网站上一样。问题是当Vagrant尝试挂载同步文件夹时,自动收报机用户不存在,我收到此错误:
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:
mount -t vboxsf -o uid=`id -u ticker`,gid=`getent group ticker...
mount -t vboxsf -o uid=`id -u ticker`,gid=`id -g ticker` srv_http_ticker /srv/http/ticker
The error output from the last command was:
stdin: is not a tty
id: ticker: no such user
id: ticker: no such user
mount: failed to parse mount options: No such file or directory
我已经安装了vagrant-vbguest插件,当我重新加载Vagrant时,我发现它正在运行,所以我不相信问题是" vboxsf"文件系统不可用。
这是我的Vagrantfile:
Vagrant.configure("2") do |config|
config.vm.box = "debian/jessie64"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 443, host: 8443
# Putting provision here doesn't fix the problem
# config.vm.provision :shell, path: "bootstrap-mgmt.sh"
config.vm.synced_folder "project/", "/srv/http/ticker",
:owner => "ticker",
:group => "ticker"
config.vm.provision :shell, path: "bootstrap-mgmt.sh"
end
这是创建自动收报机用户的引导程序配置脚本:
#!/usr/bin/env bash
sudo adduser --system --home /home/ticker --shell /bin/bash --group --disabled-login --gecos "" ticker
我尝试在synced_folder指令之前移动provision指令,但它仍然在synced_folder指令之后执行。我怀疑任何配置脚本总是最后运行并且应该发生,即使我在Vagrantfile中移动命令。
我已经读过一个vagrant-bindfs插件,它允许你更改NFS挂载的文件系统的所有者和组,但我不知道如果它运行之前它将如何帮助我我的配置脚本。
我尝试使用文件模块在Ansible脚本中更改/ srv / http / ticker目录的所有者,但这不起作用(我读过的所有内容都表明它不会)。
我知道我可以离开" vagrant:vagrant"作为所有者:我的网站所在的已安装文件系统的组,但我希望它由自动收录器用户拥有,以便它与我的生产服务器完全相似。
我是否有另一种方法可以将我的Vagrant synced_folder的所有者从流浪者用户更改为我的自动收报机用户?如果这是不可能的,那么其他人在遇到这种情况时会做些什么呢?
感谢。
答案 0 :(得分:1)
看起来,以下两种可能性将起作用
使用
更新您的bootstrap-mgmt.sh
脚本
#!/usr/bin/env bash
sudo adduser --system --home /home/ticker --shell /bin/bash --group --disabled-login --gecos "" ticker
sudo mount -t vboxsf -o uid=`id -u ticker`,gid=`getent group ticker | cut -d: -f3` project /project
sudo mount -t vboxsf -o uid=`id -u ticker`,gid=`id -g ticker` project /project
您可以使用不会更改的UID和GID定义同步文件夹
TICKER_UID = 106
TICKER_GID = 111
config.vm.synced_folder "project/", "/project",
owner: TICKER_UID, group: TICKER_GID
这是从github issue
引用的旧答案
你可以做点什么Vagrant.configure("2") do |config|
config.vm.box = "debian/jessie64"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 443, host: 8443
# Putting provision here doesn't fix the problem
# config.vm.provision :shell, path: "bootstrap-mgmt.sh"
config.vm.define "web" do |web|
web.vm.synced_folder "project/", "/srv/http/ticker",
:owner => "ticker",
:group => "ticker"
end
config.vm.provision :shell, path: "bootstrap-mgmt.sh"
end
根据配置顺序,外部范围将在内部范围之前运行。我没有测试,我知道它适用于配置,也适用于您的情况