0

我正在尝试获取 Ansible 中具有特定前缀的主机组的名称。现在,我正在尝试将模板任务委派给具有前缀“config_”的主机组下的服务器。

我正在使用json_query它使用 JMESPath 表达式。然而,查询不正确。谁能猜出我错过了什么?

- name: Create configsvr config file   
  template: src=mongod.conf.j2 dest={{ mongod.conf.path }} owner=mongod group=mongod mode=0600
  delegate_to: "{{ groups|json_query([?starts_with(@, `config_`)]) }}" 

错误信息:

 FAILED! => {"failed": true, "msg": "template error while templating string: unexpected char u'?' at 22. String: {{ groups|json_query([?starts_with(@, `config_m`)]) }}"}
4

2 回答 2

0

您应该简单地使用内置模式来选择您的目标主机。

---
- hosts: conf_*
  tasks:
    - name: Create configsvr config file   
      template:
        src: mongod.conf.j2
        dest: "{{ mongod.conf.path }}"
        owner: mongod
        group: mongod
        mode: 0600
于 2017-07-28T08:09:30.887 回答
0

您可以通过使用组来改进您的库存,如下所示:

[conf:children]
conf_a
conf_b
conf_c

[conf_a]
srv1

[conf_b]
srv2

[conf_c]
srv3

然后conf在你的剧本中定位目​​标群体:

---
- hosts: conf
  tasks:
    - name: Create configsvr config file   
      template:
        src: mongod.conf.j2
        dest: "{{ mongod.conf.path }}"
        owner: mongod
        group: mongod
        mode: 0600
于 2017-07-29T12:30:54.217 回答