下面是我如何调用我的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