在 Ansible 中为 Vagrant VM 设置主机名

Set host name for Vagrant VM in Ansible

为了测试 Ansible,我设置了一个可以使用 vagrant provision 提供的 Vagrant VM,给定

config.vm.provision "ansible" do |ansible|
  ansible.playbook = "site.yml"
end

Vagrantfile。这在我将 hosts 设置为 all

时有效
- hosts: all
  sudo: true
  roles:
    - common
    - ssl
    - webserver

或者,文件

.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory

这是由 Vagrant 自己生成的

default ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222

表示 Vagrant VM 的名称是 default。因此,

- hosts: default

也做我想做的。但是,我想为 VM 取一个更具体的名称(例如 vagrant)。

有没有办法将该名称更改为其他名称?

您可以从 vagrant 文档中阅读 The inventory file

如果你想更改 VM 的名称,你可以使用

Vagrant.configure("2") do |config|
  config.vm.define "host1"
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "site.yml"

这将生成清单文件

# Generated by Vagrant

host1 ansible_ssh_host=...

请注意,vagrant 还提出了一个 static inventory option which will allow you to write your own inventory file and reference with the inventory_path 选项

诀窍是定义 VM(这里有 2 个 VM productionstaging):

config.vm.define "production" do |production|
  production.vm.hostname = "production.example.com"
end

config.vm.define "staging" do |staging|
  staging.vm.hostname = "staging.example.com"
end

然后vagrant生成如下库存:

production ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222
staging ansible_ssh_host=127.0.0.1 ansible_ssh_port=2200

另见 this answer

要在 .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory 中仅更改 清单主机名 ,请使用:

config.vm.define "myvm"

这将生成以下内容:

# Generated by Vagrant
myvm ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222

因此,ansible inventory_hostname 将变为 myvm

如果您想更改机器的主机名,请使用:

config.vm.define "myvm" do |myvm|
  myvm.vm.hostname = "myvm.example.com"
end