运行 除了 运行 在 vagrant guests 上播放外,当通过 vagrant 提供剧本时

running plays on host besides running on vagrant guests when playbook is provisioned via vagrant

其实我是ansible的新手。我相信我正在使用一个 ansible,即 Ubuntu 主机的 /usr/bin/ansible 来提供流浪的客人但是,我在哪里可以更改我的剧本以便我可以控制主机上的一些东西除了流浪的客人?

要在本地主机上执行 运行 命令,基本上您有两个选择:

  1. 您可以像这样使用 local_action 快速获取内容:

- name: take out of load balancer pool local_action: command /usr/bin/some_command

  1. 你可以像这样在你的剧本中收集任务:

- name: Execute some local commands hosts: localhost tasks: - local_action: command /usr/bin/some_command - local_action: command /usr/bin/some_command

有关更多信息,请参阅非常广泛的 docmentation

在您的 Vagrantfile 中,您可以将配置定义为:

config.vm.provision "ansible" do |ansible|
ansible.playbook = "myPlaybook.yml"

在这种情况下,Vagrant 会自动在 .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory 中创建一个 Ansible 清单文件 看起来像:

# Generated by Vagrant
default ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222

所以剧本 运行s 到本地主机通过 ssh 连接到端口 2222 而不是本地主机

---
- hosts: localhost
  connection: local

如果我很理解你的问题,你需要在 Vagrant 提供的主机和你的 Vagrant 主机(本地主机)上 运行 相同的剧本。

所以我认为你可以为 Vagrant 提供的主机分配一个 ip,你正在使用 Ansible 配置并使用你将提供给 Vagrant 的静态清单文件,所以你的 Vagrantfile 将包含类似

config.vm.network "private_network", ip: "192.168.33.10"
...

config.vm.provision "ansible" do |ansible|
ansible.playbook = "myPlaybook.yml"
ansible.inventory_path = "./myInventory"

并在 ./myInventory

myHost1 ansible_ssh_host=192.168.33.10 ansible_ssh_port=22

那么你应该能够区分 vagrant 提供的主机(因为它是远程主机)和你的本地主机。然后你将安排你的剧本有不同的目标(myHost1 和本地主机),它应该正确处理 local_action.

在您的库存中,您可以像在任何可靠的库存文件中一样定义组,并且您可以告诉 Vagrantfile 来处理供应 ansible.groups

config.vm.provision "ansible" do |ansible|
ansible.playbook = "myPlaybook.yml"
ansible.inventory_path = "./myInventory"
ansible.groups = { 
"group1" => ["myGroup"]