Ansible, gerçekleri toplamayı başardı


52

Ansible kutumla ilgili bazı garip sorunlar yaşıyorum (serseri).

Her şey dün çalıştı ve oyun kitabım iyi çalıştı.

Bugün, ansible "gerçekleri bir araya getirme" ye mi bağlı?

İşte ayrıntılı çıktı:

<5.xxx.xxx.xxx> ESTABLISH CONNECTION FOR USER: deploy
<5.xxx.xxx.xxx> REMOTE_MODULE setup
<5.xxx.xxx.xxx> EXEC ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-
o', 'ControlPersist=60s', '-o', 'ControlPath=/home/vagrant/.ansible/cp/ansible-s
sh-%h-%p-%r', '-o', 'Port=2221', '-o', 'KbdInteractiveAuthentication=no', '-o',
'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o
', 'PasswordAuthentication=no', '-o', 'User=deploy', '-o', 'ConnectTimeout=10',
'5.xxx.xxx.xxx', "/bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1411372677
.18-251130781588968 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1411372677.18-2
51130781588968 && echo $HOME/.ansible/tmp/ansible-tmp-1411372677.18-251130781588
968'"]

1
Ne kadar zaman için kilitleniyor? Denediniz mi vagrant sshfaydalıdır şey olup olmadığını görmek için bekleme sırasında ve araştırmak psve netstat? Ayrıca, askıda olan ilk şüphelilerden biri DNS'tir - DNS'nin sanal makinenin içinden çözülüp çözülmediğini kontrol edin.
Antonis Christofides

1
Yorumunuz için teşekkürler. Çözüm basitti, serseri yıkıcı ve sersemlemiş ... Hala çalışmayı bırakmasının garip olduğunu düşünüyorum.
Bj Blazkowicz

1
Erişilemez (cifs-) bir bağ varsa, Ansible'ın durmasıyla ilgili bir sorunum vardı.
rektide

1
Sadece oldu, bilinen_hosts dosyasındaki eski bir ana bilgisayar anahtarından kaynaklandı. Bağlantının bu durumda olduğu gibi başarısız olması garip.
GnP

Sshd günlüklerini serseri kutusuna kontrol edebilir misiniz? / Etc / ssh / sshd_config dosyasında "LogLevel DEBUG" ayarlamanız gerekebilir, ancak bu neler olup bittiğiyle ilgili daha fazla bilgi sağlayabilir.
Pablo Martinez

Yanıtlar:


31

Vagrant'daki Ansible ping ile benzer bir sorun yaşıyordum, birdenbire sebepsiz yere sıkışıp kalmıştı ve daha önce kesinlikle iyi çalışıyordu. Ssh veya bağlanma gibi herhangi bir sorunun aksine, sonsuza dek zaman aşımına uğramadan ölür.

Bu sorunu çözmek için yaptığım bir şey ~/.ansibledizini temizlemek ve sadece tekrar çalışıyor. Nedenini bulamıyorum, ancak çözüldü.

Eğer tekrar değişiklik ~/.ansibleyapacaksanız, Vagrant'ınızı yenilemeden önce klasörü temizlemeyi deneyin .


3
rm -rf ~/.ansiblebenim için El Captitan'da işe yaramadı
Quanlong

8
rm -rf ~ / .ansible / cp yeter
melihovv

20

Benim için kurulum modülü modülü ölü bir NFS bağlantısına yapışmıştı.

Makinenize bir "df" yaparsanız ve hiçbir şey olmuyorsa, aynı durumda olabilirsiniz.

Not: NFS paylaşım / bağlama noktasını düzenleyemiyorsanız, "umount -l" kodunu kullanmayı düşünün.


evet, öyleydi!
Saurabh Nanda

Başlangıçta ayarlayarak soruna var gather_factsetmek Falseama bu benim sorunum da olduğu için bu ucu gerçekten günü kurtardı.
pkaramol

18

Ansible, genellikle bir bağlantı problemi nedeniyle veya kurulum modülü askıda kaldığı için bir takım nedenlerden dolayı bu şekilde takılabilir. İşte problemi nasıl daraltacağınız, böylece çözebilirsiniz.

Ansible hedef ana bilgisayara bağlanamıyor

Ana Bilgisayar Anahtarı (known_hosts) Sorunları

1) Ansible'ın eski sürümlerinde (2.1 veya daha eski), Ansible, hedef için ana bilgisayar anahtarının kaynakta bulunup bulunmadığını veya bir uyuşmazlık olup olmadığını size söylemez.

Çözüm: Bu hedefle aynı parametrelerle bir SSH bağlantısı açmayı deneyin. Çözmeniz gereken SSH hatalarını bulabilirsiniz ve daha sonra komut çalışacaktır.

2) Bazen Ansible, diğer durumların ortasında size bir SSH bağlantı mesajı görüntüler ve bu da Ansible'ın bu görevde “donmasına” neden olur:

Warning: the ECDSA host key for 'myhost' differs from the key for the IP address '10.10.1.10'
Offending key for IP in /etc/ssh/ssh_known_hosts:246
Matching host key in /etc/ssh/ssh_known_hosts:477
Are you sure you want to continue connecting (yes/no)?

Bu durumda, istediğiniz kadar SSH sorusu için "evet" yazmanız oyunun devam etmesine izin verecektir. Daha sonra bilinen köklerin problemlerini çözebilirsiniz.

Özel Anahtar Kimlik Doğrulama Problemleri

Anahtar tabanlı kimlik doğrulama vs şifre kullanıyorsanız, diğer problemler şunlardır:

  • Özel anahtar hedefte doğru şekilde ayarlanmamış olabilir
  • Özel anahtarın yerel olarak yanlış izinleri olabilir (yalnızca Ansible işini çalıştıran kullanıcı tarafından okunabilir olmalıdır)

Çözüm: ansible -m ping <destination> -ksorun ana bilgisayara karşı çalışmayı deneyin - bu işe yaramazsa, yukarıdaki Ana Bilgisayar Anahtar Sorunları çözümlerini deneyin .

Ansible hızlı bir şekilde gerçekleri toplayamaz

setup(Bir başlangıcında otomatik olarak çalışacak modül ansible-playbookvadede veya el olarak çalıştırdığınızda ansible -m setup <host>donanım gerçekleri toplarken), genellikle asmak (örneğin yüksek g / ç, kötü monte girişleri, vb konaklardan disk bilgilerini almak ise).

Çözüm: koşmayı deneyin ansible -m setup -a gather_subset=!all <destination>. Bu işe yararsa, bu satırı ansible.cfg dosyasında ayarlamayı düşünmelisiniz:

gather_subset=!hardware

1
Kurulumu yapmak için 'gather_subset =! Hardware' e geçmek, yanıt vermeyen belirli bir VM için çalıştı.
JamesP

2
Benim için düzeltildi. Çok tehlikeli noktalar, sanırım. Sağlam provizyon için kullandığım bir VM'm vardı ve yeni bir NFS payı ekleyene kadar çalıştı. Şimdi yukarıdakileri ekleyene kadar yapmaz.
David Boshton

Benim durumumda ana bilgisayar anahtar sorunu olduğu ortaya çıktı. Ana bilgisayar yeniden ücretlendirildi, bu nedenle ilk çalıştırmam başarısız oldu ve ssh-keygen -Rrahatsız edici anahtarı kaldırmak için önerilen komutu çalıştırdım . Anahtarın eklenmesi için bir kere ssh koştum, fakat ikinci bölüm asılıydı. Tekrar ssh çalıştırdığımda, beklenmeyen bir anahtar onay istemi aldım. Çıkarılması gereken rahatsız edici bir anahtar olduğunu fark ettim, bu yüzden ssh'yi çıkardıktan sonra ssh'i tekrar okuduktan Warning: Permanently added the ECDSA host key ...sonra mesajı aldım ve sonra sadece gerçekler toplanmaya devam etti.
haridsv

Bu gözlemi @DavidBoshton'dan onaylayabilirim. Bu sorun, NFS dizinlerinin takılı olduğu, mevcut olmayan bir VM'de mevcuttu (NFS sunucusu sorunu). NFS sunucusunu tamir ettikten sonra çalıştı
tschale 14:18

7

Ansible ile Gathering Facts'de takılmaya benzer bir sorun yaşadım. Senaryomu hiçbir görev veya rol olmadan istemi üzerine indirdim ve hala askıda kaldı.

İşlem listemde gün boyunca biriken 12 adet asılabilir işlem bulundu.

/usr/bin/python /tmp/ansible_Jfv4PA/ansible_module_setup.py
/usr/bin/python /tmp/ansible_M2T10L/ansible_module_setup.py

Onları öldürdüğümde tekrar çalışmaya başladı.


5

Ansible'ın gerçekleri bir araya toplamanın neden pek çok nedeni var, ancak daha ileri gitmeden önce, böyle bir durumda yapmanız gereken ilk test:

ansible -m ping <hostname>

Bu test sadece ana bilgisayara bağlanır ve geri dönmek için yeterli kodu çalıştırır:

<hostname> | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Bu işe yararsa, hedef ana bilgisayar adını çözebileceğiniz, bir bağlantı açabileceğinizi, kimliğinizi doğrulayabildiğinizi ve uzak bir python yorumlayıcısıyla uyumlu bir modül çalıştırabileceğini kanıtladığından, herhangi bir kurulum veya bağlantı sorununu hemen hemen göz ardı edebilirsiniz.

Şimdi, işte bir oyun kitabının başında yanlış gidebilecek şeylerin (ayrıntılı olmayan) bir listesi:

Ansible tarafından yürütülen komut etkileşimli bir girişi bekliyor

Bunun, bir sudo şifresi (bir -Kanahtarı unuttuğunuzda ) veya asla yeni bir ssh ana bilgisayarı parmak izi kabul etmeden etkileşimli bir giriş için bekleyeceği bir komutun bekleyeceği daha eski sürümlerde olduğunu hatırlıyorum. ) ev sahipliği yapar.

Ansible'ın modern versiyonları bu davaların her ikisini de incelikle ele alır ve normal kullanımlar için hemen bir hataya neden olur, bu yüzden ssh veya sudo gibi şeyler yapmadığınız sürece, bu tür bir sorun yaşamamalısınız. Öyle yapsanız bile, gerçeklerin toplanmasından sonra olur.

Ölü ssh ana bağlantısı

Burada verilen hata ayıklama günlüğünde ssh istemcisine iletilen bazı ilginç seçenekler var:

  • ControlMaster=auto
  • ControlPersist=60s
  • ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r

Bu seçenekler man ssh_config dosyasında belgelenmiştir .

Varsayılan olarak, ansible, ssh bağlantısı kullanımı konusunda akıllı olmaya çalışır. Belirli bir ana bilgisayar için, oyundaki her bir görev için yeni bir bağlantı oluşturmak yerine, bir kez açılacak ve tüm oyun kitabı (ve hatta oyun kitaplarında bile) için açık kalacaktır.

Yeni bir bağlantı kurmak zaten mevcut olanı kullanmaktan çok daha yavaş ve hesaplama yoğun olduğu için bu iyi.

Uygulamada, her ssh bağlantısı adresinde bir soketin varlığını kontrol edecektir ~/.ansible/cp/some-host-specific-path. İlk bağlantı bulamıyor, bu yüzden normal bağlanır ve sonra onu oluşturur. Daha sonra yapılan her bağlantı, daha önce kurulmuş olan bağlantıdan geçmek için bu soketi kullanacaktır.

Kurulan bağlantı nihayet zaman aşımına uğradıysa ve yeterince uzun süre kullanılmadığında kapansa bile, soket de kapalıdır ve tekrar kare bağlantıya geçiyoruz.

Çok uzak çok iyi.

Ancak bazen, bağlantı gerçekte ölür, ancak ssh istemcisi hala kurmuş olduğunu düşünür. Bu, genellikle oyun kitabını dizüstü bilgisayarınızdan çalıştırdığınızda olur ve WiFi bağlantınızı kaybederseniz (ya da WiFi’ten Ethernet’e vb.

Bu son örnek, çok kötü bir durum: Eğer yapabilirsiniz varsayılan ssh yapılandırma ile hedef makineye ssh ancak bu süre önceki bağlantı hala etkin olarak kabul edileceği için yanıtlayıcı 'bile yenisini kuran denemez.

Bu noktada, biz sadece bu eski soketten kurtulmak istiyoruz, ve bunu yapmanın en basit yolu onu çıkarmaktır:

# Delete all the current sockets (may disrupt currently running playbooks)
rm -r ~/.ansible/cp
# Delete only the affected socket (requires to know which one it is)
rm ~/.ansible/cp/<replace-by-your-socket>

Bu tek seferlik bir düzeltme için mükemmeldir, ancak çok sık gerçekleşirse daha uzun vadeli bir düzeltme yapmanız gerekebilir. İşte bu hedefe yardımcı olabilecek bazı öneriler:

  • Bir kitapçıdan oyun kitaplarını başlatın (ağ bağlantınız dizüstü bilgisayarınızınkinden daha kararlı)
  • Kullanım yanıtlayıcı 'yapılandırmayı veya doğrudan ssh istemci yapılandırma bağlantı paylaşımını devre dışı bırakmak
  • Aynı kaynakları kullanın, ancak zaman aşımına uğrayan ince ayarları yapmak için ana bağlantı çökmesinin gerçekte daha hızlı zaman aşımına uğraması

Lütfen, yazı yazarken, birkaç seçeneğin değiştiğini (örneğin, en son çalıştırmam bana verdi ControlPath=/home/toadjaune/.ansible/cp/871b533295), ancak genel fikrin hala geçerli olduğunu unutmayın.

Bilgi toplama aslında çok fazla zaman alıyor

Her oyunun başında, ansible hedef sistem hakkında çok fazla bilgi toplar ve bunları Gerçeklere koyar . Bunlar daha sonra oynatma kitabınızda kullanabileceğiniz değişkenlerdir ve genellikle gerçekten kullanışlıdır, ancak bazen bu bilgiyi almak çok uzun olabilir (kötü montaj noktaları, yüksek giriş / çıkışlı diskler, yüksek yük ...)

Bu söyleniyor, kesinlikle bir oyun kitabı çalıştırmak için gerçeklere ihtiyacınız yok ve neredeyse hepsi değil, o yüzden hadi ihtiyacımız olanı etkisizleştirelim. Bunun için çeşitli seçenekler:

Hata ayıklama amacıyla, kurulum modülünü doğrudan komut satırından çağırmak gerçekten uygundur:

ansible -m setup <hostname>

Bu son komut, oynatma kitabınızın yanı sıra askıda kalmalı ve sonunda zaman aşımına uğrama (veya başarılı) olmalıdır. Şimdi, modülü tekrar çalıştıralım, yapabileceğimiz her şeyi devre dışı bırakalım:

ansible -m setup -a gather_subset='!all' <hostname>

Bu hala askıda kalırsa, oyununuzdaki modülü tamamen tamamen deneyebilir ve devre dışı bırakabilirsiniz, ancak probleminizin başka bir yerde olması muhtemeldir.

Ancak, iyi çalışıyorsa (ve hızlı bir şekilde çalışıyorsa), modül belgelerine bir göz atın . İki seçeneğiniz var:

  • Gereksinim duymadığınız şeyleri hariç olmak üzere, bir altküme toplama özelliğini sınırlandırın (olası değerleri görün gather_subset)
  • gather_timeout Ayrıca, daha fazla zaman tanıyarak da sorununuzu çözmenize yardımcı olabilir (bu bir takma zaman aşımı hatasını düzeltmek olsa da)

Diğer sorunlar

Açıkçası, başka şeyler yanlış gidebilir. Hata ayıklamaya yardımcı olacak birkaç işaretçi:

  • Yürütülen -vvvvher komutu size göstereceğinden, ansible maximum verbosity level ( ) kullanın.
  • Kullanım pingve setupyukarıda açıklandığı gibi komut satırından doğrudan modüller
  • Eğer elle ssha deneyin ansible -m pingçalışmıyor

4

Dmytro bir şeye açık!

Ansible, ana bilgisayarın FQDN'sini kullanır. Eğer ana makineniz DNS tarafından /etc/hostsçözülemiyorsa ve size uygun bir eşlemeniz yoksa, DNS'nin zaman aşımına uğramasını bekleyecektir.

::1 <fqdn>Bağlandığınız makinelerin ana bilgisayar dosyasına Ansible ekleyerek , FQDN'yi DNS'den geçmeden hemen alır.

Ana makinenin ana bilgisayarlardan arama yapması gerektiğini unutmayın; /etc/hostsbu, hepsinde olmasa da, çoğu linux sistem için varsayılandır, ancak düzenlemeniz /etc/nsswitch.confde bir sorun olabilir.


2

Ben de aynı sorunu yaşadım. Ayrıntılı modda ansible koşarken yararlı bir bilgim yok.

Sunucuyu çalıştırmadan önce sunucuya yetki verildi.

Sunucuyu bilinen ana bilgisayar listesinden kaldırmak, aşağıdaki komutu kullanarak bu sorunu çözdü.

$ ssh-keygen -f "~/.ssh/known_hosts" -R <hostname>
$ ssh-keygen -f "~/.ssh/known_hosts" -R <ip_address>

Not: Hem ana bilgisayar adını hem de ip adresini silmeniz gerekir.


Benim durumumda bir IP adresini tekrar kullandım. Bu nedenle, bilinen ana bilgisayar dosyasında iki ana bilgisayar anahtarı vardı
Karthik

1

Bir sudo oyun kitabı kullanıp kullanmadığını bilmiyorum - ama öyleydim ve sudo şifresinde asılıydı.

Belgelerden - onu öldürebilir ve sonra da kullanabilirsiniz -K.

İyi şanslar.


1

Belki hedef sisteminizin Parmak İzi, örneğin sunucu işletim sistemini yeniden yüklediğinizde değişmiştir. İçeri girdiler silmek zorunda known_hosts , yanıtlayıcı 'olacak değil açıkladığınız gibi güvenilir olmayan giriş sorunu olduğunu bildirir, sadece tam olarak takılıyor.


1

Kimlik doğrulaması yapamayacak kadar kulağa zor geliyor ... bu yüzden, aşağıda gösterildiği gibi sunucu şifresini sormaya izin vermek için -k kullanın:

ansible-playbook  -K -i hosts playbook.yml -vvvv

0

FQDN ve ana bilgisayar adı uyuşmazlığı da sıkı Hangout'a neden olabilir. FQDN'yi etki alanıyla kullandım, ana bilgisayar adı etki alanından farklı. Her ikisini de eşit yaptıktan sonra , mantıklı çalışır. Muhtemel olarak sorumlu olan, uzak ana bilgisayarda görevler gerçekleştirmeden önce FQDN ve ana bilgisayar adını karşılaştırır. Umarım yardımcı olur!


0

Serseri kutusunu sıfırlayarak bu sorunu çözdüm

vagrant destroy
vagrant up

0

Benim durumumda ansible bir görevin ortasında çalışmayı bıraktı. Sebebi, ssh-ajanımın çalışmayı durdurmasıydı ( ssh-add -lhiçbir şey iade etmiyordu). Her şeyi yeniden başlattım ve tekrar çalıştı. Bu nedenle, ssh-ajanınızın düzgün çalışıp çalışmadığını kontrol edin (takılmamalıdır ssh-add -l).


0

~/.ansibleYalnız silmek , benim için yapmadı. Yani bu dizinde ne olduğunu kontrol etmek için sadece bir ctrl-z yaptım (uykuya koymak işlemi) ve kontrol ve sonra ansible işlemine devam etti fg. Bu durumda hiçbir şeyi silmedim. ama ondan sonra devam etti. Bu yüzden sadece ctrl-z-> denedim fgve o da işe yaradı. Yağmur dansı gibi geliyor, ama başka biri sıkışmışsa, lütfen bunu da dene.


0

Ansible-playbook'umun neden “Gerçekleri Buluşmak” ile ilişkili olduğunu takip ederek bu sorunun nedenini düzelttim. Blog yazısı.

Basitleştirilebilir:

  1. DEFAULT_KEEP_REMOTE_FILES=yesKomutları korumak ve etkinleştirmek için ayarlayın .-vvvv

  2. Oyun kitabını tekrar çalıştırın.

  3. Oyun durduğunda, basılan son kabuk komutunu kopyala (sonraki bölüm /bin/sh -c)

  4. Sunucuda üzerinden oturum açın ssh.

  5. straceOyunun son basamağını tekrarlamak için kullanın . Step komutu -vvvçıktıdan kopyalanır . Örneğin:strace -f /bin/sh -c "echo BECOME-SUCCESS-ltxvshvezrnmumzdprccoiekhjheuwxt; /usr/bin/python /home/user/.ansible/tmp/ansible-tmp-1527099315.31-224479822965785/setup.py"

  6. Sıkışmış olan "straced" adımını hangi aramada kontrol edin ve düzeltin :)

Benim durumum erişilemez bir ağ sürücüsüydü ...


-1

Sudo'nun şifresi sorun. Yeni açılan terminalde (parolanın önbellekte saklanmadığı) (2) kuklanın önceki kılavuzdaki 'sudo'ların değişikliklerini tersine çevirmediğini belirtmeden ' (sudo) herhangi bir şey yayınlayabildiğinden emin olun .


1
Kukla? Hangi kukla? Bu cevaplanabilir bir soru.
Deer Hunter

Evet biliyorum. Bazı insanlar, aynı makineye bağımlı olanların kullanıldığı kuklaları kurmuş olabilir (bu bir zamanlar benim durumumdu)
witkacy26
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.