Değişkeni komut satırındaki sesli oynatma kitabına nasıl geçirebilirim?


Yanıtlar:


308

Dokümanları okurken bu örneği veren değişkenleri komut satırında geçiriyorum:

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

Diğer örnekler JSON dizesinden (≥ 1.2) veya dosyadan (≥ 1.3) nasıl yükleneceğini gösterir


33
Ayrıca, ile tanımlanan --extra-varsdeğişkenlerin, oynatma kitabında tanımlanan değişkenleri geçersiz kılacağını unutmayın.
sağlama toplamı

5
Ayrıca not (dokümanlardan): key=valueSözdizimi kullanılarak iletilen değerler dize olarak yorumlanır . Dize olmaması gereken bir şey (Booleans, integer, float, list vb.) İletmeniz gerekiyorsa JSON biçimini kullanın. Örneğin:--extra-vars '{"i_wasted_30_mins_debugging_a_boolean_string":true}'
smilin_stan

159

Diğer yanıtlar, komut satırı değişkenlerini nasıl ileteceğinizi, ancak bunlara nasıl erişeceğinizi belirtmez;

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

Yml dosyanızda, bunları kapsamındaki ansible değişkenlere aşağıdaki gibi bir şey yaparak atarsınız:

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

Komut satırı argümanlarını kullanmanın bir alternatifi, oturumunuzda önceden tanımlanmış çevresel değişkenleri kullanmaktır, bunlara şu gibi ansible yml dosyalarınızda başvurabilirsiniz:

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

29
Ne hakkında konuştuğunuzdan emin değil misiniz ?? Benim cevabım genişletir --extra-vars komut satırı bayrağıyla başvurarak önceden kabul cevapları üzerinde VE nasıl yaml yapılandırması içinde onları başvurmak için. Sonra da bunu yapmanın alternatif bir yolunu sunuyorum.
GreensterRox

1
Buradaki soru, değişkeni komut satırından geçirmektir . Bu yüzden kendi sorusu / cevabı ve ilgili bir bağlantı olduğu için daha iyi olurdu. Soruna bir yorum olarak ve ilgili bağlantıyı yapabilirsiniz.
Édouard Lopez

43
Genişletilmiş cevap bana yardımcı oldu. Şüphesiz, parametrelerin nasıl geçileceğini bilerek kısmen değişkenlere nasıl başvurulacağını bilmek. Aksi takdirde onları geçmiyor, sadece değişkeni geçmek istediğinizi beyan ediyorsunuz. Bir nesneyi geçmek için bir verici ve alıcı gerekir. Bir değişkeni iletmek için parametre bildirimi ve parametrenin kullanılması gerekir.
26'de conteh

lookup('env', SOMETHING)12 faktörü ile eşleştirilir.
zx1986

1
Değişkenin adını değiştirmeyi unutmayın: version: {{ version }}yanlış, versionkendi başına tanımlamak gibi .
Minh Nghĩa

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

25
-eBayrak kısa şeklidir--extra-vars
Edouard Lopez

4
Değişken dosyayı iletebilir miyim?
OpsEco

13
@AniruddhaJawanjal evet, beğen--extra-vars "@some_file.json"
AlanSE

1
@OpsEco @AlanSE bir dosyadan değişken geçiriyorsanız --extra-vars, dosyada olmayan değişkenleri iletmek için ikinci bir bayrağa ihtiyacınız olduğunu unutmayın . Örneğin--extra-vars "@some_file.json" --extra-vars "other_variable=foo"
bonh

Teşekkürler @bonh aradığım buydu
fan


31

Nedense yukarıdaki cevapların hiçbiri benim için çalışmadı. Ansbile 2.2.0 benim oyun kitabına birkaç ekstra vars geçmek gerekiyor gibi, bu nasıl çalıştığını (her var önce -e seçeneği not):

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

4
-e--extra-vars
Édouard Lopez

@LXCdev KohaLappi +1, kendi -ebayraklarında ek değişkenler belirtebileceğinizi göstermek için
ctlockey

Ayrıca tek bir bayrak kullanarak birden çok değişken tanımlayabilirsiniz:-e "firstvar=false second_var=value2"
Nils Breunese

Aynı sorun. Tek bir bayrakla çoklu değişkenler çalışmaz. Nedenini merak ediyorum?
Bret

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

Yml dosyasında bunları şöyle kullanabilirsiniz

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

Ayrıca --extra-varsve -eaynıysa, bunlardan birini kullanabilirsiniz.


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

burada değişkenler 'pathoftsfiles' ve 'klasör' olarak kullanılmaktadır. Şimdi bu değişkenin değeri aşağıdaki komutla verilebilir

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

Not: Değerleri kabuk komutundaki değişkene iletirken ters virgül kullanmayın


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

Kabuk ortamı değişkenlerini kullanmak istiyorsanız bu da benim için çalıştı:

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"

Yukarıdaki komutu aşağıdaki oyun kitaplarında kullanabilirsiniz.

---
- 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`
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.