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

218

Saya baru mengenal sesuatu yang mungkin dan bertanya-tanya bagaimana melakukannya karena yang berikut ini tidak berfungsi

ansible-playbook -i '10.0.0.1,' yada-yada.yml --tags 'loaddata' django_fixtures="tile_colors"

Di mana django_fixturesvariabel saya.

Édouard Lopez
sumber

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)

Édouard Lopez
sumber
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') }}
GreensterRox
sumber
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"
lanni654321
sumber
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
33

Anda dapat menggunakan --extra-varsopsi ini. Lihat dokumen

jarv
sumber
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
OpenITeX
sumber
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.

Ali Atakan
sumber
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

Nitesh Jain
sumber
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}}"
Naveen Goyal
sumber
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') }}"

pengguna164328
sumber
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`
Rajeev Singh
sumber