当通过流浪汉提供playbook时,在主机上运行除了在流浪客人上运行之外

时间:2016-11-18 15:40:13

标签: vagrant ansible-playbook

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

2 个答案:

答案 0 :(得分:1)

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

  1. 对于快速的东西,您可以像local_action一样使用:
  2. - name: take out of load balancer pool local_action: command /usr/bin/some_command

    1. 你可以在你的剧本中找到一系列任务:
    2. - name: Execute some local commands hosts: localhost tasks: - local_action: command /usr/bin/some_command - local_action: command /usr/bin/some_command

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

答案 1 :(得分:0)

在您的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

所以playbook运行到localhost通过ssh连接到端口2222而不是localhost连接

---
- hosts: localhost
  connection: local

如果我完全理解您的问题,您需要在Vagrant提供的主机和Vagrant主机(localhost)上运行相同的Playbook。

所以我认为您可以为使用Ansible配置的Vagrant提供的主机分配一个ip,并使用您提供给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提供的主机(因为它是一个远程主机)与localhost。然后你将安排你的playbook有不同的目标(myHost1和localhost),它应该正确处理local_action。

在您的清单中,您可以在任何ansible清单文件中定义组,并且您可以告诉Vagrantfile处理提供的ansible.groups

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