Ansible: Değişkeni dosya içeriğine ayarla


94

ansible-playbookBir dosyanın içeriğine bir değişken ayarlamak istiyorum ile ec2 modülünü kullanıyorum . İşte şu anda bunu nasıl yapıyorum.

  1. Dosya adı ile var
  2. catdosyaya kabuk görevi
  3. catec2 modülüne geçmek için sonucunu kullanın .

Başucu kitabımın örnek içerikleri.

vars:
  amazon_linux_ami: "ami-fb8e9292"
  user_data_file: "base-ami-userdata.sh"
tasks:
- name: user_data_contents
  shell: cat {{ user_data_file }}
  register: user_data_action
- name: launch ec2-instance
  local_action:
...
  user_data: "{{ user_data_action.stdout }}"

Bunu yapmanın çok daha kolay bir yolu olduğunu varsayıyorum, ancak Ansible belgelerinde arama yaparken bulamadım.


Bu benim için çalıştı. Değişkenleri bir arama (boru) komutuna nasıl yerleştireceğimi bulamadım.
ericson.cepeda

Yanıtlar:


94

Ansible'daki aramaları bir dosyanın içeriğini elde etmek için kullanabilirsiniz , örn.

user_data: "{{ lookup('file', user_data_file) }}"

Uyarı: Bu arama, uzak dosyalarla değil yerel dosyalarla çalışacaktır.

İşte belgelerden eksiksiz bir örnek :

- hosts: all
  vars:
     contents: "{{ lookup('file', '/etc/foo.txt') }}"
  tasks:
     - debug: msg="the value of foo.txt is {{ contents }}"

93
cat@ TesterJeff'in örneğindeki komut uzak makinede çalışırken aramanın yerel olarak çalıştığını unutmayın .
Alex Dupuy

9
Uzaktan aramalar için slurp ve getir modüllerini kontrol edin
Marco Ferrari

17

Uzak ana bilgisayardan bir dosya almak için slurp modülünü kullanabilirsiniz : (Önerdiğiniz için @mlissner'a teşekkürler)

vars:
  amazon_linux_ami: "ami-fb8e9292"
  user_data_file: "base-ami-userdata.sh"
tasks:
- name: Load data
  slurp:
    src: "{{ user_data_file }}"
  register: slurped_user_data
- name: Decode data and store as fact # You can skip this if you want to use the right hand side directly...
  set_fact:
    user_data: "{{ slurped_user_data.content | b64decode }}"

9

Dosyaları uzak ana bilgisayarlardan yerel konuma kopyalamak için getirme modülünü ve getirilen dosyaların içeriğini okumak için arama modülünü kullanabilirsiniz.


6
Yanıtlayıcı konusunda tamamen yeniyim, ama bunun için neden höpürdetmeyi kullanmıyorsunuz? Bir dosyanın içeriğini çekmek için uzaktan kumanda üzerinde çalışıyor gibi görünüyor.
mlissner

0

arama yalnızca localhost üzerinde çalışır. Eğer almak istiyorsanız bir değişkenlerden değişkenler uzaktan include_vars kullanmak yapılan dosyası: {{ varfile }}. İçindekiler {{ varfile }}formun bir sözlüğü olmalıdır {"key":"value"}, iki nokta üst üste işaretinden sonra bir boşluk eklerseniz yanıtın size sorun çıkaracağını göreceksiniz.


7
Bu saçmalık. include_varshedefteki dosyalarla değil, kontrol makinesinde yerel olarak çalışır.
techraf
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.