首先,我看过很多类似标记的帖子,但没有任何效果。我有一个现有的 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
将 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。
基本上,我知道这个剧本是有效的,因为我一直在运行它。我尝试在 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)
归档时间: |
|
查看次数: |
4112 次 |
最近记录: |