Yürütülmekte olan geçerli yanıtlanabilir başucu kitabına giden yolu olan değişken?


109

Yürütülmekte olan geçerli yanıtlanabilir başucu kitabına giden mutlak yolu olan yanıtlanabilir bir değişken var mı?

bazı bağlam:localhost Bir mysql docker yapılandırmak için yanıtlanabilir bir komut dosyası çalıştırıyorum / oluşturuyorum ve veri hacmini yanıtlanabilir komut dosyasına göre bağlamak istiyorum.

Örneğin, bir depoyu ödünç aldığımı varsayalım ~/branch1/ve ardından ansible-playbook dev.ymlhacmi kaydetmesi gerektiğini düşündüğümü çalıştırdım ~/branch1/.docker_volume/. Eğer onu çalıştırırsam, ~/branch2o zaman birimi ~/branch2/.docker_volume/.


2
Hiç düşünmediğim ilginç bir soru. Ancak bunu sormanız, bir şeyi çok yanlış bir şekilde yapıyor olabileceğinizin bir göstergesidir.
Antonis Christofides

Katılıyorum, ayrıntılara gireceğim @AntonisChristofides
Josh Unger

Yanıtlar:


192

playbook_dirDeğişken kullanabilirsiniz .


2
Benzer bir sorunla karşı karşıyaydım ve cevabınız onu çözdü. Teşekkürler. Ancak playbook_dirdeğişkenin belgelendiği herhangi bir yer bulamadım . Bana dokümantasyonu gösterir misiniz lütfen? YA DA, bu değişkenden nasıl haberdar olduğunuzu açıklar mısınız?
slayedbylucifer

3
Yanıtlanabilir kodda buluyorum: github.com/ansible/ansible/blob/…
Seva Poliakov

2
AYRICA, tüm değişkenlerle birlikte ilginç bir repo github.com/lorin/ansible-quickref var.
Seva Poliakov

46

Tam olarak istediğinizi tutan bir değişken yok gibi görünüyor.

Ancak, alıntı yapmak dokümanları :

Ayrıca mevcut, inventory_dir Ansible'ın envanter ana bilgisayar dosyasını tutan dizinin yol adı, Ansible'ın envanter ana bilgisayar dosyasına inventory_fileişaret eden yol adı ve dosya adıdır.

playbook_dir, playbook temel dizinini içerir.

Ve sonunda, role_path mevcut rolün yol adını (1.8'den beri) döndürecektir. Bu sadece bir rol içinde çalışacaktır.

Kurulumunuza bağlı olarak, bunlar veya $ pwdtabanlı çözüm yeterli olabilir.


2

Maalesef yok. Aslında mutlak yol, Ansible'ın nasıl çalıştığı bağlamında biraz anlamsız (ve potansiyel olarak kafa karıştırıcı). Özetle, bir başucu kitabını çalıştırdığınızda, Ansible her görev için görevle ilişkili modülü fiziksel olarak hedef makinedeki geçici bir dizine kopyalar ve ardından modülü gerekli parametrelerle çalıştırır. Dolayısıyla, hedef makinedeki mutlak yol, içinde yalnızca birkaç geçici dosya içeren geçici bir dizindir ve başucu kitabının tamamını bile içermez. Ayrıca Ansible sunucusundaki bir dosyanın tam yolunu bilmek, tüm Ansible dizin ağacınızı hedefler üzerinde çoğaltmadığınız sürece, hedef makinede neredeyse işe yaramaz.

Ansible tarafından tanımlanan tüm değişkenleri görmek için aşağıdaki komutu çalıştırmanız yeterlidir :

$ ansible -m setup hostname

Oyun kitabına giden mutlak yolu bilmeniz gerektiğini düşünmenizin nedeni nedir?


Teşekkürler Bruce, ne yapmaya çalıştığımı detaylandırmak için sorumu değiştirdim.
Josh Unger

6
Mutlak yerel yol hiç de anlamsız değildir. Örneğin, herhangi bir yerel komutu çalıştırmak ve / veya doğrudan yanıtlanabilir yapılandırmaya dahil edilemeyen diğer yerel dosyaları veya hizmetleri sorgulamak için kullanılabilir. Ansible'ın modüle sahip olması, local_actionbunun için meşru kullanım durumlarının olduğu anlamına gelir.
Cray

1

Rollerimi yerel olarak test etmek için bunun gibi bir oyun kitabı kullanıyordum:

---
- hosts: localhost
  roles:
     - role: .

ancak bu Ansible v2.2 ile çalışmayı durdurdu.

Yukarıda belirtilen çözümde hata ayıkladım

---
- hosts: all
  tasks:
    - name: Find out playbooks path
      shell: pwd
      register: playbook_path_output
    - debug: var=playbook_path_output.stdout

ve "geçerli çalışma dizini" değil, ana dizinimi oluşturdu

İle yerleştim

---
- hosts: all
  roles:
    - role: '{{playbook_dir}}'

yukarıdaki çözüme göre.


1

Bu amaç için yerleşik bir değişken yoktur, ancak her zaman "pwd" komutuyla oyun kitabının mutlak yolunu bulabilir ve çıktısını bir değişkene kaydedebilirsiniz.

- name: Find out playbook's path
  shell: pwd
  register: playbook_path_output
- debug: var=playbook_path_output.stdout

Artık yol, playbook_path_output.stdout değişkeninde mevcuttur


7
Bu durumda pwd, başucu kitabı komut dosyasının yolunu döndürmez. İşlemin geçerli dizinini döndürür (normal olarak ansible-playbook). İkisinin aynı olması gerekmez ve yanıtlayıcının tam olarak çağrıldığı şekle bağlıdır.
Cray

5
@Cray doğru. Ne olursa olsun, Ansible'ın bu değişkeni sizin için zaten hazırladığını belirtmek istedim: debug: var=ansible_env.PWD(bu bana ansible-playbookyerel makinemde çalıştırdığım dizini ve uzak sunuculardaki ana dizini verir)
NS du Toit

4
Alternatif olarak mevcut dizin şu şekilde de bulunabilir:{{ lookup('env','PWD') }}
2017
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.