【发布时间】:2016-11-19 01:41:22
【问题描述】:
我实际上是 ansible 的新手。我相信我正在使用一个 ansible 即 Ubuntu 主机的 /usr/bin/ansible 来配置 vagrant 客人,但是,我可以在哪里更改我的剧本,以便我可以控制主机上的一些东西,除了 vagrant 客人?
【问题讨论】:
我实际上是 ansible 的新手。我相信我正在使用一个 ansible 即 Ubuntu 主机的 /usr/bin/ansible 来配置 vagrant 客人,但是,我可以在哪里更改我的剧本,以便我可以控制主机上的一些东西,除了 vagrant 客人?
【问题讨论】:
要在本地主机上运行命令,基本上有两种选择:
local_action 来快速获取内容,如下所示:
- name: take out of load balancer pool
local_action: command /usr/bin/some_command
- 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
所以 playbook 运行到 localhost,通过 ssh 连接到端口 2222,而不是 localhost
---
- hosts: localhost
connection: local
如果我很好理解您的问题,您需要在 Vagrant 提供的主机和您的 Vagrant 主机 (localhost) 上运行相同的 playbook。
所以我认为您可以为 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 和 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"]
【讨论】:
vagrant up 做这些事情。由于我们使用的是 host 的 ansible,因此必须有可能在同一 playbook 上玩 host 。