优化ansible playbook以克服多客户端的冗余硬编码

优化ansible playbook以克服多客户端的冗余硬编码,ansible,Ansible,我正在为我的新客户编写ansible playbook,我必须复制一组现有代码来替换新客户,这会导致冗余 我尝试使用带有两个变量(客户端名称、客户端id)的Ansible查找插件,但它不适合我的问题 - name: delete existing {{client_name}} deployment file: path=/opt/tomcat2/webapps/{{client_name}} state=absent - name: {{client_name}} dir crea

我正在为我的新客户编写ansible playbook,我必须复制一组现有代码来替换新客户,这会导致冗余

我尝试使用带有两个变量(客户端名称、客户端id)的Ansible查找插件,但它不适合我的问题

 - name: delete existing {{client_name}} deployment
   file: path=/opt/tomcat2/webapps/{{client_name}} state=absent

 - name: {{client_name}} dir create
   file: path=/opt/tomcat2/webapps/{{client_name}} state=directory   mode=0755

 - name: {{client_name}} deploy
   command: jar -xf /tmp/idp.war chdir=/opt/tomcat2/webapps/{{client_name}}
   sudo: True

 - name: template task-config.xml
   template: src=../roles/u4ia/templates/{{client_id}}task-config.xml dest=/opt/tomcat2/webapps/{{client_name}}/WEB-INF/classes/task-config.xml

每当我需要一个新客户机时,我不应该通过复制现有的代码片段来硬编码客户机名称和id。我应该有一些变量,以便只添加一次。

可以将所有任务放在单独的文件中,并将变量放在特定的字典中。比如说

$ cat update-clients.yml
 - name: delete existing {{ mlv.client_name }} deployment
   file: path=/opt/tomcat2/webapps/{{ mlv.client_name }} state=absent
 ...
clients_update:
  - client_name: 'client-A'
    client_id: '007'
  - client_name: 'client-B'
    client_id: '008'
  - client_name: 'client-C'
    client_id: '009'
创建一个包含变量的字典。比如说

$ cat update-clients.yml
 - name: delete existing {{ mlv.client_name }} deployment
   file: path=/opt/tomcat2/webapps/{{ mlv.client_name }} state=absent
 ...
clients_update:
  - client_name: 'client-A'
    client_id: '007'
  - client_name: 'client-B'
    client_id: '008'
  - client_name: 'client-C'
    client_id: '009'
和循环包含任务


注意。这个解不是幂等的。这些应用将被删除并重复创建。最好在循环中添加一个条件,并仅在需要时进行更新。

可以将所有任务放在单独的文件中,并将变量放在特定的字典中。比如说

$ cat update-clients.yml
 - name: delete existing {{ mlv.client_name }} deployment
   file: path=/opt/tomcat2/webapps/{{ mlv.client_name }} state=absent
 ...
clients_update:
  - client_name: 'client-A'
    client_id: '007'
  - client_name: 'client-B'
    client_id: '008'
  - client_name: 'client-C'
    client_id: '009'
创建一个包含变量的字典。比如说

$ cat update-clients.yml
 - name: delete existing {{ mlv.client_name }} deployment
   file: path=/opt/tomcat2/webapps/{{ mlv.client_name }} state=absent
 ...
clients_update:
  - client_name: 'client-A'
    client_id: '007'
  - client_name: 'client-B'
    client_id: '008'
  - client_name: 'client-C'
    client_id: '009'
和循环包含任务

注意。这个解不是幂等的。这些应用将被删除并重复创建。最好向循环中添加一个条件,并仅在需要时更新