Bagaimana saya bisa meneruskan variabel ke buku pedoman yang mungkin di baris perintah?


Jawaban:


307

Membaca dokumen saya menemukan bagian Passing Variables On The Command Line , yang memberikan contoh ini:

ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"

Contoh lain menunjukkan cara memuat dari string JSON (≥ 1.2) atau file (≥ 1.3)


33
Perhatikan juga bahwa variabel yang didefinisikan dengan --extra-varsakan menimpa variabel yang didefinisikan dalam buku pedoman.
checksum

5
Perhatikan juga (dari dokumen): Nilai yang diteruskan menggunakan key=valuesintaksis ditafsirkan sebagai string . Gunakan format JSON jika Anda harus memasukkan apa pun yang seharusnya bukan string (Boolean, integer, float, daftar dll). Misalnya:--extra-vars '{"i_wasted_30_mins_debugging_a_boolean_string":true}'
smilin_stan

159

Jawaban lain menyatakan bagaimana cara mengirim variabel baris perintah tetapi tidak cara mengaksesnya, jadi jika Anda melakukannya:

--extra-vars "version=1.23.45 other_variable=foo"

Dalam file yml Anda, Anda menetapkan ini untuk scoping variabel yang mungkin dilakukan dengan melakukan sesuatu seperti:

vars:
    my_version: "{{ version }}"
    my_other_variable: {{ other_variable }}

Alternatif untuk menggunakan args baris perintah adalah dengan memanfaatkan variabel lingkungan yang sudah didefinisikan dalam sesi Anda, Anda dapat referensi ini dalam file yml Anda yang mungkin seperti ini:

vars:
    my_version: "{{ lookup('env', 'version') }}"
    my_other_variable: {{ lookup('env', 'other_variable') }}

29
Tidak yakin apa yang kamu bicarakan ?? Jawaban saya memperluas jawaban yang diterima sebelumnya dengan merujuk ke flag baris perintah --extra-vars DAN bagaimana merujuknya dalam konfigurasi yaml Anda. Lalu saya menawarkan cara alternatif untuk melakukannya juga.
GreensterRox

1
Pertanyaannya di sini adalah variabel lulus khusus melalui baris perintah . Itulah mengapa akan lebih baik karena pertanyaan / jawaban sendiri dan tautan terkait. Anda dapat dan tautan terkait sebagai komentar atas pertanyaan.
Édouard Lopez

43
Jawaban yang diperluas membantu saya. Tentunya mengetahui cara mereferensikan variabel yang dilewatkan sebagai bagian dari cara mengetahui cara mengirimkan parameter. Kalau tidak, Anda tidak meneruskannya melainkan hanya menyatakan bahwa Anda ingin meneruskan variabel. Untuk melewati suatu objek membutuhkan pemberi dan penerima. Untuk melewati suatu variabel membutuhkan deklarasi parameter dan penggunaan parameter.
conteh

lookup('env', SOMETHING)cocok dengan 12 faktor.
zx1986

1
Ingatlah untuk mengubah nama variabel: version: {{ version }}salah, seperti mendefinisikan versiondengan sendirinya.
Minh Nghĩa

41
ansible-playbook release.yml -e "version=1.23.45 other_variable=foo"

25
The -ebendera adalah bentuk singkat--extra-vars
Édouard Lopez

4
Bisakah saya meneruskan file variabel?
OpsEco

13
@AniruddhaJawanjal ya, seperti--extra-vars "@some_file.json"
AlanSE

1
@OpsEco @AlanSE perhatikan bahwa jika Anda mengirimkan variabel dari file, Anda memerlukan tanda kedua --extra-varsuntuk meneruskan variabel yang tidak ada dalam file. Misalnya--extra-vars "@some_file.json" --extra-vars "other_variable=foo"
bonh

Terima kasih @bonh itulah yang saya cari
fan


31

Untuk beberapa alasan, tidak ada jawaban di atas yang berfungsi untuk saya. Karena saya perlu memberikan beberapa vars tambahan ke buku pedoman saya di Ansbile 2.2.0, inilah cara saya membuatnya berfungsi (perhatikan opsi -e sebelum setiap var):

ansible-playbook site.yaml -i hostinv -e firstvar=false -e second_var=value2

4
-eadalah bentuk pendek--extra-vars
Édouard Lopez

@LXCdev KohaLappi +1 untuk menunjukkan bahwa Anda dapat menentukan vars tambahan di -eflag mereka sendiri
ctlockey

Anda juga dapat mendefinisikan beberapa variabel menggunakan satu flag:-e "firstvar=false second_var=value2"
Nils Breunese

Permasalahan yang sama. Beberapa vars dengan satu bendera tidak akan berfungsi. Kenapa ya?
Bret

14
ansible-playbook test.yml --extra-vars "arg1=${var1} arg2=${var2}"

Dalam file yml Anda dapat menggunakannya seperti ini

---
arg1: "{{ var1 }}"
arg2: "{{ var2 }}"

Juga, --extra-varsdan -esama, Anda dapat menggunakan salah satunya.


4
 s3_sync:
      bucket: ansible-harshika
      file_root: "{{ pathoftsfiles  }}"
      validate_certs: false 
      mode: push
      key_prefix: "{{ folder }}"

di sini variabel sedang digunakan bernama 'pathoftsfiles' dan 'folder'. Sekarang nilai untuk variabel ini dapat diberikan oleh perintah di bawah ini

sudo ansible-playbook multiadd.yml --extra-vars "pathoftsfiles=/opt/lampp/htdocs/video/uploads/tsfiles/$2 folder=nitesh"

Catatan: Jangan gunakan koma terbalik sambil meneruskan nilai ke variabel dalam perintah shell


2
ansible-playbook release.yml --extra-vars "username=hello password=bye"

#you can now use the above command anywhere in the playbook as an example below:
tasks:
- name: Create a new user in Linux
shell: useradd -m -p {{username}} {{password}}"

2

Ini juga berfungsi untuk saya jika Anda ingin menggunakan variabel lingkungan shell:

ansible-playbook -i "localhost," ldap.yaml --extra-vars="LDAP_HOST={{ lookup('env', 'LDAP_HOST') }} clustername=mycluster env=dev LDAP_USERNAME={{ lookup('env', 'LDAP_USERNAME') }} LDAP_PASSWORD={{ lookup('env', 'LDAP_PASSWORD') }}"


1

ansible-playbok -i <inventory> <playbook-name> -e "proc_name=sshd"

Anda dapat menggunakan perintah di atas dalam buku pedoman di bawah ini.

---
- name: Service Status
gather_facts: False
tasks:
- name: Check Service Status (Linux)
shell: pgrep "{{ proc_name }}"
register: service_status
ignore_errors: yes
debug: var=service_status.rc`
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.