Vraag Anoniem: kopieer sjabloon alleen als het doelbestand niet bestaat


ik gebruik Ansible 1.6.6 om mijn machine te voorzien.

Er is een sjabloon taak in mijn playbook dat bestemmingsbestand maakt van Jinja2-sjabloon:

tasks:
    - template: src=somefile.j2 dest=/etc/somefile.conf

Ik wil niet vervangen somefile.conf als het al bestaat. Is het mogelijk met Ansible? Zo ja, hoe?


44
2017-07-05 11:10


oorsprong




antwoorden:


U kunt controleren of het bestand bestaat met stat en gebruik de sjabloon alleen als het bestand niet bestaat.

tasks:
  - stat: path=/etc/somefile.conf
    register: st
  - template: src=somefile.j2 dest=/etc/somefile.conf
    when: not st.stat.exists

54
2017-07-05 11:54



Oh geweldig. Erg bedankt! ) - Slava Fomin II


Je kunt gewoon de dwingen param van de sjabloonmodule:

tasks:
    - template: src=somefile.j2 dest=/etc/somefile.conf force=no

Of de taak benoemen ;-)

tasks:
    - name: Create file from template if it doesn't exist already.
      template: 
        src: somefile.j2
        dest:/etc/somefile.conf
        force: no

Van de Ansible-sjabloonmodule docs:

kracht: de standaard is ja, die het externe bestand zal vervangen wanneer   inhoud is anders dan de bron. Zo nee, dan zal het bestand dat alleen zijn   overgedragen als de bestemming niet bestaat.

Andere antwoorden gebruiken stat omdat het dwingen parameter is toegevoegd nadat ze zijn geschreven.


27
2017-11-26 17:00



mijn antwoord gebruikt stat, omdat er ten tijde van de vraag / antwoord geen krachtargument beschikbaar was voor sjabloon - Teftin


U kunt eerst controleren of het doelbestand bestaat of niet en vervolgens een beslissing nemen op basis van de uitvoer van het resultaat.

tasks:
  - name: Check that the somefile.conf exists
    stat:
      path: /etc/somefile.conf
    register: stat_result

  - name: Copy the template, if it doesnt exist already
    template:
      src: somefile.j2
      dest: /etc/somefile.conf
    when: stat_result.stat.exists == False   

10
2018-01-16 11:17



Ik geef de voorkeur aan dit antwoord omdat het zijn taken noemt :) - Asfand Qazi


Volgens mij is de eenvoudigste oplossing om het attribuut "force = no" uit de sjabloonmodule te gebruiken


-2
2017-09-10 12:09