使用 Vagrant 和 Ansible 在本地主机上运行任务

Old*_*131 6 vagrant ansible

首先,我看过很多类似标记的帖子,但没有任何效果。我有一个现有的 Ansible 主机,我成功地使用它来将软件部署到其他服务器。我想使用 Vagrant 设置一个测试环境来运行我现有的 playbook,而不进行任何更改。

我已经在不同的服务器上安装了 Ansible 和 Vagrant,并复制了 playbook、清单和组/主机变量文件。

但是,当我vagrant up使用 Ansible(远程)配置程序在 Vagrant 主机上运行调用 playbook 时,它在针对主机运行时会给出以下消息: localhost

PLAY [Set fact for later use] **************************************************
skipping: no hosts matched
Run Code Online (Sandbox Code Playgroud)

剧本(摘录)如下所示:

- name: Set fact for later use
  hosts: localhost
  tasks:
    - name: set number of hosts for later use
      set_fact: num_hosts="{{ groups[tagname] | length }}" 
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

- name: Set fact for later use
  hosts: 127.0.0.1
  connection: local
  tasks:
    - name: set number of hosts for later use
      set_fact: num_hosts="{{ groups[tagname] | length }}"
Run Code Online (Sandbox Code Playgroud)

我的静态库存(摘录)如下所示:

'# Ungrouped hosts, specify before any group headers.
localhost ansible_connection=local
Run Code Online (Sandbox Code Playgroud)

我已经尝试过动态清单以及剧本和清单文件中localhost/的各种组合,但在 Vagrant 主机上总是跳过该步骤。127.0.0.1

Pav*_*kin 6

将 localhost 添加到 ansible.limit 解决了我的问题 我每次 Vagrantfile 执行仅启动一次配置,所以我使用

ansible.limit = "all,localhost"
Run Code Online (Sandbox Code Playgroud)

如果您为每个虚拟机启动 Ansible 配置,您可以使用类似的东西

ansible.limit = "#{machine.vm.hostname},localhost"
Run Code Online (Sandbox Code Playgroud)

limit key 直接传递给 Ansible,Vagrant 在任何情况下都会设置它。如果未直接指定限制,它将被设置为当前 VM 主机名,以便 Ansible 将仅适用于当前正在配置的 VM。


Old*_*131 0

基本上,我知道这个剧本是有效的,因为我一直在运行它。我尝试在 Vagrant 主机上手动运行它,它按预期运行。然后,只需将 Ansible 配置程序替换为 Vagranthost_shell配置程序(可通过插件使用):

vagrant plugin install vagrant-host-shell
Run Code Online (Sandbox Code Playgroud)

为了完整性:

config.vm.provision :host_shell, inline: <<-SHELL
  cd ansible
  ansible-playbook -v -i inventory install.yml --extra-vars '{"db":"mysql"}'
  SHELL
Run Code Online (Sandbox Code Playgroud)