Ansible'daki bir dosyaya değişken yaz


103

JSON'u URI modülü aracılığıyla çekiyorum ve alınan içeriği bir dosyaya yazmak istiyorum. İçeriği alıp hata ayıklayıcıya gönderebiliyorum, böylece içeriğin alındığını biliyorum, ancak dosya yazmak için en iyi uygulamayı bilmiyorum.

Yanıtlar:


201

copyModülü şu contentparametre ile kullanabilirsiniz :

- copy: content="{{ your_json_feed }}" dest=/path/to/destination/file

Buradaki dokümanlar: kopyalama modülü


5
content = "{{your_json_feed}}", boşluk ve satırsonu ile ilgilenir. Alıntılar önemlidir.
m.kocikowski

@RamondelaFuente Dosyaya birden fazla değişken içeriği eklemek istersem, "kopyala" modülünü birden çok kez kullanmam gerekir yoksa başka bir yol var mı?
KishoreReddy

1
@KishoreReddy Değişkenleri eklemek için jinja2 sözdizimini kullanabileceğinizi hayal ediyorum. "{{Değişken ~ başka_değişken}}" gibi bir şey. Hoş değil, ancak işler daha da karmaşıklaşırsa, template:modülü kullanabilir ve çalışma zamanında kaydedilen değişkenlerle doldurabilirsiniz.
Ramon de la Fuente

Bu, formda bir sha256 toplam dosyası oluşturmak istediğinizde shahash /path/to/file(aradaki 2 boşluğa dikkat edin) ve ardından sha256sum -c shafileAnsible aracılığıyla oluşturduklarınızı komut satırından (aracılığıyla ) doğrulamak istediğinizde daha iyi çalışır .
Daniel Andrei Mincă

12

Ramon'un cevabına göre bir hatayla karşılaştım. JSON'da yazmaya çalıştığım boşlukların sorunu, başucu kitabındaki görevi şöyle görünecek şekilde değiştirerek sorunu çözdüm:

- copy:
    content: "{{ your_json_feed }}"
    dest: "/path/to/destination/file"

Şimdilik bunun neden gerekli olduğundan emin değilim. En iyi tahminim, değişkenlerin Ansible'da nasıl değiştirildiği ve sonuçta ortaya çıkan dosyanın ayrıştırılmasıyla bir ilgisi olduğu.


11

Çok küçük dosyalar yazmıyorsanız, muhtemelen şablon kullanmalısınız .

Misal:

- name: copy upstart script
  template: 
    src: myCompany-service.conf.j2 
    dest: "/etc/init/myCompany-service.conf"

2
Ramon'un cevabı tam olarak sorulan şeyi ele alırken, bu cevap genel olarak en iyi yaklaşımdır. Örneğin, bulutta sanal makineler oluşturan bir başucu kitabınız varsa ve başka bir başucu kitabı için ana bilgisayar envanteri oluşturmak istiyorsanız, bunun yolu bir şablondur.
Luis Artola

Bunun neden daha iyi olduğunu açıklayabilir misin?
Vorticity

@Vorticity neyden daha iyi?
Janus Troelsen

@JanusTroelsen Üzgünüm, büyük dosyalar yazarken bunun neden kabul edilen cevaptan daha iyi olduğunu açıklayabilir misiniz?
Vorticity

1
@Vorticity, çünkü başka bir dosyaya gömülü bir dosyanız olduğunda hantal hale gelir. kaçmanız gerekir ve sözdizimi vurgulama çalışmaz. şablon oluşturma mekanizması, ihtiyacınız olduğunda nesneleri ortasına yerleştirmenizi sağlar.
Janus Troelsen

0

destŞimdi seçeneği ile hedef dosyayı direkt olarak belirleyebiliriz . Aşağıdaki örnekte, json çıktısı,/tmp/repo_version_file

- name: Get repository file repo_version model to set ambari_managed_repositories=false
  uri:
    url: 'http://<server IP>:8080/api/v1/stacks/HDP/versions/3.1/repository_versions/1?fields=operating_systems/*'
    method: GET
    force_basic_auth: yes
    user: xxxxx
    password: xxxxx
    headers:
      "X-Requested-By": "ambari"
      "Content-type": "Application/json"
    status_code: 200
    dest: /tmp/repo_version_file
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.