2015-11-17 23 views
8

Ansible'da tek bir dosyanın içeriğiyle tek bir dosya oluşturmam gerekiyor. Şu anda böyle bir şey yapıyorum:Satır içi şablonları kullanmak mümkün mü?

- template: src=templates/git_commit.j2 dest=/path/to/REVISION 

Benim şablon dosyası şöyle görünür:

: Açıkçası

{{ git_commit }} 

, sadece böyle bir şey yapmak için çok daha fazla mantıklı olurdu

- inline_template: content={{ git_revision }} dest=/path/to/REVISION 

Kukla benzer bir şey sunar. Bunu Ansible'da yapmanın bir yolu var mı?

cevap

8

(udondan 'ın answer verdiği gibi) lineinfile modülüne Başka bir seçenek copy modülü kullanmak ve içerik ziyade yanıtlayıcı' ana bilgisayara yerel bir kaynak belirtin olacaktır. Ben şahsen burada copy olarak orada zaten dosyalara küçük değişiklikler yapmak için olmalı benim lineinfile gelince lineinfile bu tercih

- name: Copy commit ref to file 
    copy: 
    content: "{{ git_commit }}" 
    dest: /path/to/REVISION 

emin bir dosya yapmak için olduğu:

örneği görev benzer görünümde olacaktır bir yerde ve tam istediğiniz gibi görünüyor. Aynı zamanda birden çok hat ile başa çıkma yararına sahiptir. Bunun bir şablon görevi yapmak ve sadece sahip olmak cazip olacaktır olsa Gerçekte

bir şablon dosyası:

- name: Copy commit ref to file 
    template: 
    src: path/to/template 
    dest: /path/to/REVISION 

Daha temiz açıklanmıştır: Bu görev yarattığı alır

"{{ git_commit }}" 

ve tam olarak ne demek istedikleri için modülleri kullanıyor.

+0

src ve geriye doğru hedef olduğu ile, içerik parametre kopya modülünü kullanmak mümkündür? Şablonunuz buysa src:/path/to/REVISION istediğinizi düşünüyorum. OP'nin iyi bir sorusu var. Bir aradan geçmek zorunda kalmadan doğrudan içeriğindeki içeriğe gitmek güzel olurdu. – Greg

4

Evet, bu basit durumda lineinfile modülüyle mümkündür.

- lineinfile: 
    dest=/path/to/REVISION 
    line="{{ git_commit }}" 
    regexp=".*" 
    create=yes 

lineinfile modülü genellikle belirli bir çizgi bir dosyası içinde yer sağlamak için kullanılır. Varsa, create=yes seçeneği dosyayı yazacaktır. regexp=.* seçeneği, git_commit değiştiğinde dosyaya içerik eklemediğinizden emin olmanızı sağlar; çünkü varsayılan olarak, yeni içeriğin dosyaya eklendiğinden ve önceki içeriği değiştirmediğinden emin olabilirsiniz.

Bu, yalnızca dosyanızda yalnızca bir satıra sahip olduğunuzdan çalışır. Daha fazla satırınız olsaydı, bu modülle işe yaramazdı.

0

Bu sorun çözülüyor gibi görünüyor. Şablon dosyası birden fazla değişken olduğunu, ancak, diğer bir deyişle bir json dosyası, bir arama, yani .:

# playbook.yml 
--- 
- name: deploy inline template 
    copy: 
    content: '{{ lookup("template", "inlinetemplate.yml.j2") }}' 
    dest: /var/tmp/inlinetempl.yml 

# inlinetemplate.yml.j2 
--- 
- name: {{ somevar }} 
    abc: def 
İlgili konular