当前位置: 首页 > 知识库问答 >
问题:

Ansible with vagrant:从Vagrantfile“extra_vars”中读取清单

郭修平
2023-03-14
# Set the Vagrantbox IP address
VAGRANT_NETWORK_IP = "10.0.0.10"

# Set the Ansible configuration environment variable
ENV['ANSIBLE_CONFIG'] = "./ansible/.ansible.cfg"

Vagrant.configure("2") do |config|
  config.vm.box     = "ubuntu-precise-64"
  config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network :private_network, ip: VAGRANT_NETWORK_IP
  config.vm.synced_folder ".", "/var/www"

  config.vm.provision "ansible" do |ansible|
    ansible.playbook       = "ansible/playbook.yml"
    ansible.limit          = "all"
    ansible.inventory_path = "ansible/hosts/vagrant"
    ansible.extra_vars     = {target: VAGRANT_NETWORK_IP}
  end

end
---
- hosts: "{{ target }}"
  sudo: yes
  roles:
    # ...
10.0.0.10 ansible_ssh_user=vagrant ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key

我们使用变量vagrant_network_ip重用了Vagrantfile中的IP地址。但是,我们仍然需要在我们的库存中设置这个IP地址。是否可以在清单文件中使用ansible变量作为主机?简单地在清单中使用{{target}}是行不通的。

或者,有没有一种方法可以让这变得更容易呢?如果可能的话,我们希望在一个文件中配置盒子的IP地址。

共有1个答案

毕瀚
2023-03-14

Vagrantfile只是一个普通的ruby文件,因此可以从中生成清单文件:

File.open('ansible/hosts/vagrant' ,'w') do |f|
  f.write "[default]\n"
  f.write "#{VAGRANT_NETWORK_IP} ansible_ssh_user=vagrant ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key\n"
end

默认情况下,vagrant框以名称“default”开头,所以我通常将Ansible管理的主机限制为vagrant的主机(您可以设置ansible.limit=“default”)。

如果您希望有几个带有一个库存的流浪盒子,您可以在一个流浪文件中定义这些盒子并为其生成库存。

 类似资料:
  • 问题内容: 大家好(这是我的第一个问题,请不要太粗鲁)。我是编码初学者,并且在Android Studio中遇到了此错误:“ Gradle项目同步失败”,错误为“错误:无法从/ Users / sgrumo / Downloads / gvr-android-sdk- master读取packageName /samples/sdk-treasurehunt/src/main/AndroidMan

  • 问题内容: 我正在尝试从清单文件中提取信息以在文件中的一种方法中显示,但是似乎存在一些问题。任何帮助表示赞赏。 清单文件: myClass.java: 输出: 那有什么呢?看起来pkg对象已正确定义,但是它不读取任何Specification或Implementation属性。 问题答案: 所以我终于弄清楚了,以为我愿意和别人分享我的头,以防其他人像我那样把头撞在那堵砖墙上。我再也无法让类中的方法

  • 我有以下build.xml代码。在这里,我在jar文件中修改了清单文件。在清单中,我想添加一些属性,例如资产名称和资产基线。 buildInfo的内容。属性如下: build.xml:我想动态传递名称,即 articlelib 值,并从 buildInfo.properties 中检索值。我在清单外部使用了宏元数据,它是工作文件,但当我在清单标签中使用相同的时,我无法使用它。我是否可以解决此问题或

  • 问题内容: 只是因为一个简单,易于表达的陈述使我的脸上有些错误,所以我有点头疼。 我有一个名为strings.json的json文件,如下所示: 我现在想读取json文件。我发现了以下这些语句,但是不起作用: 控制台上显示的错误是这样的: 已编辑 从更改为 并得到了这个: 问题答案: 该方法(“ load”中没有“ s”)可以直接读取文件: 您正在使用方法,该方法仅用于 字符串 参数。 编辑:新消

  • 我有一个名为Strings.json的json文件,如下所示: 我想读取json文件,现在仅此而已。我发现了这些说法,但它不起作用: 控制台上显示的错误是: 已编辑 从更改为 得到了这个:

  • 一个看起来简单、容易的陈述却让我犯了一些错误。 我有一个名为strings.json的JSON文件,如下所示: 我想阅读JSON文件,目前仅此而已。我发现了这些语句,但它不起作用: 控制台上显示的错误如下: 如果我使用<code>json。加载而不是<code>json。加载,我得到以下错误: