2017-10-03 2 views
0

J'ai un modèle Jinja comme suitTemplate un modèle individuel par élément dans une liste (Jinja2, Anisble)

{% for cust, config in customers.items() %} 
sim.gw.{{ cust|lower }}.mw.tport.type=udp 
sim.gw.{{ cust|lower }}.mw.tport.udp.interface=lo 
{% if config['accept'] is defined %} 
sim.gw.{{ cust|lower }}.fix.accept_port={{ config['accept'] }} 
{% endif %} 
sim.gw.{{ cust|lower }}.fix.version=4.4 
sim.gw.{{ cust|lower }}.fix.tagetsubid={{ config['type'] }} 
sim.gw.{{ cust|lower }}.fix.sess.sendercompid0=CITIFX-UAT 
sim.gw.{{ cust|lower }}.fix.sess.targetcompid0={{ cust }}-S-QUOTE 
sim.gw.{{ cust|lower }}.fix.sess.sendercompid1=CITIFX-UAT 
sim.gw.{{ cust|lower }}.fix.sess.targetcompid1={{ cust }}-S-TRADE 
sim.gw.{{ cust|lower }}.fix.handler=libfixpythonhandler.so 
sim.gw.{{ cust|lower }}.fix.py_script=pySimulator.py 
sim.gw.{{ cust|lower }}.log={{ cust|lower }}.log 
{% endfor %} 

qui utilise des variables dans ce fichier yml client:

BTG-VELOCITY: 
    type: PBSTP 
    accept: 1010 
GFAM: 
    type: PBSTP 
    connect: 1010 
ONEZERO2: 
    type: TRADESTREAM 
GUANFABANK: 
    type: FXSIM 
MAINBANK: 
    type: FXSIM 
TYPOBANK: 
    type: TRADESTREAM 
TEST-BANK: 
    type: PBSTP 
    connect: 32620 
    accept: 33620 
WEAKBANK: 
    type: TRADESTREAM 

Et quand je cours mon playbook j'utilise cette configuration:

- include_vars: 
    file: /home/vagrant/stunnelSimAnsPractice/roles/ns16/vars/customers.yml 
    name: customers 
- name: templating 
    template: 
    src: /home/vagrant/stunnelSimAnsPractice/roles/ns16/templates/simulator.properties.j2 
    dest: /home/vagrant/stunnelSimAnsPractice/roles/ns16/sessions/{{ item }}/simulator.properties 
    owner: root 
    group: root 
    register: result 
    with_items: "{{ customers }}" 

Mon problème est que je souhaite créer un individu 'simulator.properties' pour chaque client. Actuellement, mon playbook génère un long simulator.properties contenant toutes les propriétés pour tous les clients et place le même fichier dans chaque répertoire client. La sortie doit être unique pour chaque client, de sorte que chaque répertoire contienne uniquement les propriétés du client donné. Est-ce qu'il y a un moyen de faire ça?

Répondre

0

Supprimez les lignes {% for... et {% endfor... de votre modèle, car vous ne voulez qu'un seul client dans le fichier résultant. Et exécutez la tâche de modèle comme suit:

- name: templating 
    template: 
    src: /home/vagrant/stunnelSimAnsPractice/roles/ns16/templates/simulator.properties.j2 
    dest: /home/vagrant/stunnelSimAnsPractice/roles/ns16/sessions/{{ item }}/simulator.properties 
    owner: root 
    group: root 
    register: result 
    vars: 
    cust: "{{ item.key }}" 
    config: "{{ item.value }}" 
    with_dict: "{{ customers }}"