【问题标题】:How can I limit the hosts to provision?如何限制主机配置?
【发布时间】:2015-05-11 11:46:40
【问题描述】:

我正在使用 Vagrant 创建 EC2 虚拟机并使用 ansible 来配置它们。我正在使用this guide 以及ec2.py 脚本进行库存。

我目前正在为一台主机配置 ansible,我给它一个名为 Purpose 的标签(假设值为“机器目的”),以便我可以在我的 ansible 文件中执行此操作(ec2.py脚本提供了这个):

- hosts: tag_Purpose_Machine_Purpose

我的问题是,如果我想添加另一个服务器,并且我想提供它,我不能使用vagrant provision server2 来执行此操作,因为这将运行 ansible 脚本,该脚本也将匹配第一个主机,并提供那个。

我想避免这种情况的原因是,尽管 ansible 指令大多是幂等的,但并非所有指令都是幂等的,所以我会在 node1 上不必要地移动一些文件等,更重要的是,还要重新启动已经运行的服务在那里。

有没有办法让 ansible 只配置我在命令行上指定的服务器?

【问题讨论】:

    标签: amazon-ec2 vagrant ansible


    【解决方案1】:

    您可以使用参数--limit 限制 Ansible 播放。它没有很好的文档记录,但您可以为其提供组名和主机名。

    ansible-playbook ... --limit hostA
    

    也可以使用逗号分隔的多个主机名:

    ansible-playbook ... --limit hostA,hostB,hostC
    

    【讨论】:

    • 感谢您的建议!我可以做到。不过,有没有办法为此使用 vagrant ?这会更简单,因为 vagrant 会自动为 ansible 提供默认选项和私钥。另外,如果我这样做,我必须使用 --no-provision 运行 vagrant,然后手动配置。
    • 我明白了,抱歉,我没有使用 Vagrant 和 Ansible 的经验。
    • 谢谢。我可以使用您的建议作为解决方法,直到找到无业游民的解决方案。
    【解决方案2】:

    你可以在 Vagrantfile 中设置

    v.vm.provision "ansible" do |ansible|
      ansible.limit = 'all'  # Change this
    

    你可以从命令行加载它

    v.vm.provision "ansible" do |ansible|
      ansible.limit = (ENV['ANSIBLE_LIMIT'] || 'all')
    

    ANSIBLE_LIMIT='x' vagrant provision
    

    【讨论】:

      猜你喜欢
      • 2018-01-11
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 2017-08-16
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      相关资源
      最近更新 更多