使用--limit指定ansible中主机的子树

使用--limit指定ansible中主机的子树,ansible,Ansible,我想将playbook应用于主机的子集。“atlanta”下的所有DBServer主机,而不是“raleigh”下的所有DBServer主机 但是我不知道如何使用-limit来指向清单中主机的特定子树 ansible all -i ./testhosts.yml --limit atlanta --list-hosts hosts (4): host1-atlanta host2-atlanta host1-raleigh host2-raleigh

我想将playbook应用于主机的子集。“atlanta”下的所有DBServer主机,而不是“raleigh”下的所有DBServer主机

但是我不知道如何使用-limit来指向清单中主机的特定子树

 ansible all -i ./testhosts.yml --limit atlanta --list-hosts

  hosts (4):
    host1-atlanta
    host2-atlanta
    host1-raleigh
    host2-raleigh

 ansible all -i ./testhosts.yml --limit 'atlanta:&dbservers' --list-hosts

  hosts (4):
    host1-atlanta
    host2-atlanta
    host1-raleigh
    host2-raleigh
我希望得到的是

    host1-atlanta
    host2-atlanta
在我的例子中,子树的“逻辑”路径是:all:usa:southerst:atlanta:dbservers

我的示例testhosts.yml

all:
  children:
    usa:
      children:
        southeast:
          children:
            atlanta:
                children:
                    dbservers:
                      hosts:
                        host1-atlanta:
                          ansible_port: 11022
                          ansible_host: 11.0.1.2
                        host2-atlanta:
                          ansible_port: 11022
                          ansible_host: 11.0.1.3
            raleigh:
                children:
                    dbservers:
                      hosts:
                        host1-raleigh:
                          ansible_port: 11022
                          ansible_host: 10.0.1.2
                        host2-raleigh:
                          ansible_port: 11022
                          ansible_host: 10.0.1.3
        northeast:
        northwest:
        southwest:
是否可以使用-limit命令行选项过滤掉所有内容,除了特定的子树

我的高级ansible调用脚本已经知道它们将在哪个站点上运行,所以我希望我能够以某种方式拥有一个公共主机文件,但能够使用某种树导航“选择器”来指定组

我意识到我能做到

 ansible atlanta -i ./testhosts.yml --limit atlanta --list-hosts
但我遇到的问题是,当我使用ansible playbook时,这种类型的“选择器”不可用。
我能找到的唯一选择器过滤器是-limit,这似乎对我不起作用。

尽管出现了这种情况,ansible中的组并没有层次结构。您只有一个dbservers组,该组的成员也属于atlanta和raleigh。只需对库存进行少量更改,您就可以更接近您想要的:

all:
  children:
    dbservers:
      children:
        dbservers-atl:
        dbservers-ral:
    usa:
      children:
        southeast:
          children:
            atlanta:
                children:
                    dbservers-atl:
                      hosts:
                        host1-atlanta:
                          ansible_port: 11022
                          ansible_host: 11.0.1.2
                        host2-atlanta:
                          ansible_port: 11022
                          ansible_host: 11.0.1.3
            raleigh:
                children:
                    dbservers-ral:
                      hosts:
                        host1-raleigh:
                          ansible_port: 11022
                          ansible_host: 10.0.1.2
                        host2-raleigh:
                          ansible_port: 11022
                          ansible_host: 10.0.1.3
        northeast:
        northwest:
        southwest:
有了这个资源清册,每个区域都有一个单独的dbserver-group。在您的区域层次结构之外有一个全局dbserver组,它包括所有dbserver-group。有了这个,你可以要求:

ansible all --list-hosts --limit dbservers-atl
并获得:

  hosts (2):
    host1-atlanta
    host2-atlanta
  hosts (4):
    host1-raleigh
    host2-raleigh
    host1-atlanta
    host2-atlanta
或者,您可以询问dbservers组:

并获得:

  hosts (2):
    host1-atlanta
    host2-atlanta
  hosts (4):
    host1-raleigh
    host2-raleigh
    host1-atlanta
    host2-atlanta
您关于“-limit”选项的陈述不正确:

。。。当我使用ansible playbook时,这种类型的“选择器”不可用

引用“曼安赛尔”或“曼安赛尔剧本”:

-l'子集',-限制'子集' 进一步将所选主机限制为其他模式

详情请参阅。例如,相当于运行ansible

ansible all --limit '!dbservers' ...
正在playbook.yml中声明“主机”

- hosts: all:!dbservers
- hosts: all
跑步

ansible-playbook playbook.yml
ansible-playbook --limit '!dbservers' playbook.yml
下一个等价项是在playbook.yml中声明所有“主机”

- hosts: all:!dbservers
- hosts: all
跑步

ansible-playbook playbook.yml
ansible-playbook --limit '!dbservers' playbook.yml

谢谢你,拉尔克斯。看起来等级制度的出现让我很困惑。你的建议是对的,我会把我的配置改成你建议的。