条件
- Vagrant 2.0.1
- vagrant框:ubuntu/xenial64
- 供应:Ansible
vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.box_download_insecure = true
config.vm.define "foobar"
config.vm.provider "virtualbox" do |provider|
provider.name = "foobar"
provider.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ]
end
config.vm.network "private_network", ip: "192.168.5.4"
config.vm.hostname = "foobar.dev"
config.hostsupdater.aliases = ["pma.foobar.dev","readis.foobar.dev"]
config.vm.synced_folder ".", "/vagrant", type: "nfs"
config.vm.provision "Installing 'vagrant'", type: "ansible_local" do |provisioner|
provisioner.playbook = "/vagrant/env/ansible/install-vagrant.yml"
provisioner.inventory_path = "/vagrant/env/ansible/inv/integration/hosts"
provisioner.limit = "localhost"
end
end
问题
可以看到,我的来宾上有3个nginx主机。我将这3个单独的配置(启用座位(从客座系统链接到了我的主机系统中,该系统将等于
sudo ln -s /vagrant/path/to/dist.conf /etc/nginx/sites-enabled/dist.conf
我第一次vagrant up
我的盒子时,站点是可触及的,因为在配置结束时,我重新启动了nginx
服务。但是,一旦我停止盒子并再次上盒子,这些站点就无法到达,但是nginx
服务正在运行。然后,我可以在外壳上重新启动nginx
服务,然后一切正常。
原因
我发现当时nginx
服务启动同步/vagrant
文件夹尚未安装。nginx
服务仍然可以正常启动,无论是否可以解决符号链接配置。
问题
我可以始终设置运行的Provision Shell脚本,该脚本会在每个vagrant up
上重新启动nginx
服务。但这不是我正在寻找的解决方案。
一旦安装了/vagrant
文件夹,是否有一种方法可以处理来宾系统中的触发器?我可以想象,我可以将脚本放入其中的某种xyz.d
文件夹,其中将使用所有必要参数来识别Vagrant Mount。
编辑(2018-04-25(
我不想依靠流浪者的机制,例如插件或进一步的配置脚本。最近,我想将相同的配置用于Docker或其他部署机制,从而将Shell脚本改为Ansible。我可以想象Docker中的安装座也存在同样的问题。
编辑(2018-04-27(
启动服务后启动服务
我发现@razius的这篇文章遇到了完全相同的问题。该解决方案不是最新的,我有提示要寻找相当于他的解决方案的systemd
。但是我不熟悉它。所以可以帮助我。
https://stackoverflow.com/a/38559856/2323764
我找到了上面链接的解决方案,但是由于systemd
标准和建议,我必须进行修改。
-
systemd
单位更改不属于/lib/systemd
,而这些更改可以随时被软件包和/或分发更新覆盖。单位的更改必须在/etc/systemd
中的单元的副本中进行。 - 复制
/lib/systemd/system/nginx.service
/etc/systemd/system/nginx.service
- 将
[Install]
部分中的设置WantedBy
更改为vagrant.mount
- 请注意,名称
vagrant.mount
取决于Vagrant安装到框中的路径。如果您安装vagrant/somepath
坐骑为vagrant-somepath.mount
。 - 运行以下命令以重写单元的目标文件和其他必要的依赖项:
systemctl daemon-reload
systemctl disable nginx.service
systemctl enable nginx.service
这导致我的Ansible处理程序如下:
- name: Stopping the service 'nginx.service'
listen: "restart service 'nginx.service'"
systemd:
name: "nginx.service"
state: stopped
- name: Copying the service unit 'nginx.service'
listen: "restart service 'nginx.service'"
copy:
src: "/lib/systemd/system/nginx.service"
dest: "/etc/systemd/system/nginx.service"
force: yes
- name: Configuring the service unit 'nginx.service' dependency to 'vagrant.mount'
listen: "restart service 'nginx.service'"
replace:
path: "/etc/systemd/system/nginx.service"
regexp: "^WantedBy=(.*)$"
replace: "WantedBy=vagrant.mount"
- name: Running 'daemon-reload'
listen: "restart service 'nginx.service'"
systemd:
daemon-reload: yes
- name: Disabling service 'nginx.service'
listen: "restart service 'nginx.service'"
systemd:
name: "nginx.service"
enabled: no
- name: Enabling service 'nginx.service'
listen: "restart service 'nginx.service'"
systemd:
name: "nginx.service"
enabled: yes
- name: Starting service 'nginx.service'
listen: "restart service 'nginx.service'"
systemd:
name: "nginx.service"
state: started