如何在可见库存主机中拆分字符串两次



下面是我如何调用我的ansible-playbook的应用程序名称APP1&APP2

ansible-playbook -i /web/aes/admin/playbooks/updated.hosts /web/aes/admin/playbooks/split.yml -e ENV=qa -e NODE=cluster -e instance_name=APP1,APP2

剧本:

---
- hosts: "{{ [ENV] | product(instance_name.split(',')) | product([NODE]) | product(['wladmin_mmsplit'])|map('flatten')|map('join', '_') }}"
user: wladmin
gather_facts: no
vars:
ansible_host_key_checking: false
ansible_ssh_extra_args: -o StrictHostKeyChecking=no  -o ConnectionAttempts=20

期望输出:

[[qa_APP1_cluster_wladmin_mmsplit,玩"qa_APP2_cluster_wladmin_mmsplit"]]


我现在的问题是应用程序名称由APP1-brazil&APP2-Chile

现在我将不得不进一步分割instance_name与连字符,所以我可以得到APP1&APP2所以我试了下面不工作。

- hosts: "{{ [ENV] | product(instance_name.split(',') | split('-')[0]) | product([NODE]) | product(['wladmin_mmsplit'])|map('flatten')|map('join', '_') }}"

我得到下面的错误:

ERROR! template error while templating string: expected token ',', got
'['. String: {{ [ENV] | product(instance_name.split(',') |
split('-')[0]) | product([NODE]) |
product(['wladmin_mmsplit'])|map('flatten')|map('join', '_') }}

我还尝试了下面的命令:

- hosts: "{{ [ENV] | product(instance_name.split(',')[0].split('-')[0]) | product([NODE]) | product(['wladmin_mmsplit'])|map('flatten')|map('join', '_') }}"

但是输出和预期的不一样。

输出:

PLAY [['qa_A_cluster_wladmin_mmsplit', 'qa_P_cluster_wladmin_mmsplit', ' q_p_cluster_wladmin_mmsplit ',"qa_P_cluster_wladmin_mmsplit"、"qa_1_cluster_wladmin_mmsplit"]]>

你能建议一下吗?

下面是编辑过的playbook,它将通过从命令行传递参数来为您完成这项工作。虽然有点棘手,但它现在可以工作了

---
- name: "{{ ENV.split() | product(range(0,instance_name | split(',') | map('split','-') | list | flatten | list | length, 2) | map('extract', instance_name     | split(',') | map('split','-') | list | flatten | list) | list )  | map('join', '_') | product(NODE.split()) |  map('join', '_') | product(['wladmin_mmsplit']) | map('join', '_') |  join(',')  }}"
hosts: localhost
become: true
tasks:
- name: Generate the range
copy:
content: "hello world"
dest: count.txt

下面是剧本的输出。

ansible-playbook split_final.yml -e ENV='qa' -e NODE='cluster' -e instance_name='APP1-brazil,APP2-Chile'
PLAY [qa_APP1_cluster_wladmin_mmsplit,qa_APP2_cluster_wladmin_mmsplit] *************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************
ok: [localhost]
TASK [Generate the range] **********************************************************************************************************************************************
ok: [localhost]
PLAY RECAP *************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

最新更新