Ansible与_项目循环$n次

Ansible与_项目循环$n次,ansible,Ansible,我试图编写一个ansible脚本,在同一mongo服务器上的多个dbs上的多个集合上配置相同的id。我如何使用\u items$n运行多次 集合是已知的,并且MongoDB配置了相同的名称 最初,我尝试了一些使用_项的方法。我想我应该能够使用with_嵌套,但它似乎不喜欢我将$n格式化为列表的方式 - set_fact: mongo_list: "{{range(1, {{ number_devsims }} + 1) | list}}" - name: Updating simid

我试图编写一个ansible脚本,在同一mongo服务器上的多个dbs上的多个集合上配置相同的id。我如何使用\u items$n运行多次

集合是已知的,并且MongoDB配置了相同的名称

最初,我尝试了一些使用_项的方法。我想我应该能够使用with_嵌套,但它似乎不喜欢我将$n格式化为列表的方式

- set_fact:
    mongo_list: "{{range(1, {{ number_devsims }} + 1) | list}}"

- name: Updating simid
  command: "mongo \"{{ mongo_db_name }}-{{ item[1] }}\" --eval 'db.{{ item[0] }}.update({}, {$set : {simid : \"{{ devsim_eng_simid }}\"}})'"
  with_nested:
    - ['engines', 'servers', 'simulations']
    - "{{ mongo_list}}"
理想情况下,我希望能够更新每个mongo的所有集合。比如说

- set_fact:
    mongo_list: [1, 2]
我似乎在我的套装中遇到的错误是

TASK [devsim_data : set_fact] ***************************************************************************************
Wednesday 21 August 2019  10:50:40 -0700 (0:00:00.066)       0:00:17.668 ****** 
fatal: [eco]: FAILED! => {"msg": "template error while templating string: expected token ':', got '}'. String: {{range(1, {{ number_devsims }} + 1) | list}}"}


问题是您试图在另一个Jinja表达式中嵌套{{{标记:

    mongo_list: "{{range(1, {{ number_devsims }} + 1) | list}}"
因为您已经在Jinja上下文中,所以嵌套的{{…}}是不必要的;它应该是:

    mongo_list: "{{range(1, number_devsims + 1) | list}}"
有了这个解决方案,我认为其他一切都应该可以正常工作。我将您的命令任务包装在调试任务中进行测试,如下所示:

---
- hosts: localhost
  gather_facts: false
  vars:
    number_devsims: 2
    mongo_db_name: example
    devsim_eng_simid: example-eng-simid
  tasks:
    - set_fact:
        mongo_list: "{{range(1, number_devsims + 1) | list}}"

    - name: Updating simid
      debug:
        msg:
          command: "mongo \"{{ mongo_db_name }}-{{ item[1] }}\" --eval 'db.{{ item[0] }}.update({}, {$set : {simid : \"{{ devsim_eng_simid }}\"}})'"
      with_nested:
        - ['engines', 'servers', 'simulations']
        - "{{ mongo_list}}"
这导致:

PLAY [localhost] *****************************************************************************************************************************************************************************************************************************************************************************

TASK [set_fact] ******************************************************************************************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Updating simid] ************************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => (item=['engines', 1]) => {
    "msg": {
        "command": "mongo \"example-1\" --eval 'db.engines.update({}, {$set : {simid : \"example-eng-simid\"}})'"
    }
}
ok: [localhost] => (item=['engines', 2]) => {
    "msg": {
        "command": "mongo \"example-2\" --eval 'db.engines.update({}, {$set : {simid : \"example-eng-simid\"}})'"
    }
}
ok: [localhost] => (item=['servers', 1]) => {
    "msg": {
        "command": "mongo \"example-1\" --eval 'db.servers.update({}, {$set : {simid : \"example-eng-simid\"}})'"
    }
}
ok: [localhost] => (item=['servers', 2]) => {
    "msg": {
        "command": "mongo \"example-2\" --eval 'db.servers.update({}, {$set : {simid : \"example-eng-simid\"}})'"
    }
}
ok: [localhost] => (item=['simulations', 1]) => {
    "msg": {
        "command": "mongo \"example-1\" --eval 'db.simulations.update({}, {$set : {simid : \"example-eng-simid\"}})'"
    }
}
ok: [localhost] => (item=['simulations', 2]) => {
    "msg": {
        "command": "mongo \"example-2\" --eval 'db.simulations.update({}, {$set : {simid : \"example-eng-simid\"}})'"
    }
}

PLAY RECAP ***********************************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
PLAY [localhost] *****************************************************************************************************************************************************************************************************************************************************************************

TASK [set_fact] ******************************************************************************************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Updating simid] ************************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => (item=['engines', 1]) => {
    "msg": {
        "command": "mongo \"example-1\" --eval 'db.engines.update({}, {$set : {simid : \"example-eng-simid\"}})'"
    }
}
ok: [localhost] => (item=['engines', 2]) => {
    "msg": {
        "command": "mongo \"example-2\" --eval 'db.engines.update({}, {$set : {simid : \"example-eng-simid\"}})'"
    }
}
ok: [localhost] => (item=['servers', 1]) => {
    "msg": {
        "command": "mongo \"example-1\" --eval 'db.servers.update({}, {$set : {simid : \"example-eng-simid\"}})'"
    }
}
ok: [localhost] => (item=['servers', 2]) => {
    "msg": {
        "command": "mongo \"example-2\" --eval 'db.servers.update({}, {$set : {simid : \"example-eng-simid\"}})'"
    }
}
ok: [localhost] => (item=['simulations', 1]) => {
    "msg": {
        "command": "mongo \"example-1\" --eval 'db.simulations.update({}, {$set : {simid : \"example-eng-simid\"}})'"
    }
}
ok: [localhost] => (item=['simulations', 2]) => {
    "msg": {
        "command": "mongo \"example-2\" --eval 'db.simulations.update({}, {$set : {simid : \"example-eng-simid\"}})'"
    }
}

PLAY RECAP ***********************************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0