Sınıf bulunamadı, henüz orada.


31

puppet agentYeni bir görüntüden arama yaparken err: Could not find class custommodhata alıyorum. Modülün kendisi, /etc/puppet/modules/custommodçağırdığımız diğer tüm modüllerle aynıdır, fakat bu bir engeldir.

[Site.pp]

node /clunod-wk\d+\.sub\.example\.local/ {
      include base
      include curl
      include custommod
      class{ "custommod::apps": frontend => "false}
      [...]
}

Kuklacı hata ayıklama çıktısı ile çalıştırıldığında, taban ve kıvrılma ile ilgili bilgileri açıkça bulur:

debug: importing '/etc/puppet/modules/base/manifests/init.pp' in environment production
debug: Automatically imported base from base into production
debug: importing '/etc/puppet/modules/curl/manifests/init.pp' in environment production
debug: Automatically imported curl from curl into production
err: Could not find class custommod for clunod-wk0130.sub.example.local at /etc/puppet/manifests/site.pp:84 on node clunod-wk0130.sub.example.local

Satır 84 include custommod

Kısaltılmış bir dizin ve dosya yapısı:

/etc/puppet
   |- manifests
   |     |- site.pp
   |
   |- modules
         |- base
         |    |- manifests
         |          |- init.pp
         |
         |- curl
         |    |- manifests
         |          |- init.pp
         |   
         |- custommod
              |- files 
              |     |- apps
              |         |- [...]
              |
              |- manifests
                    |- init.pp
                    |- apps.pp

Yazım denetimi yaptım:}

İçeriği init.ppcustommod dizinde tamamen özellik geçerli:

class custommod {
}

Amaç, etin olduğu apps.pp dosyası için boş bir sınıf oluşturmaktır.

class custommod::apps {

    [lots of stuff]
}

Sadece, uygulamalar dosyasına asla ulaşamıyor. Ben yorum yaparsam include custommod, yukarıdaki hata class{ "custommod::apps": frontend => "false}yerine satırında oluşturulur .

Bu hatanın nasıl ortaya çıktığını bulmak için avımda neyi özlüyorum? Yerel olarak çalıştırıldığı takdirde bu deponun gayet iyi çalıştığını not etmeliyim puppet apply.


Sınıfınızın olup olmadığını görmek için istemci yaml dosyasında bir zirve yaptınız mı?
Zoredache

@Zoredache / var / lib / kukla / client_yaml / dizin istemcide boş. Müşteri could not retrieve catalog from remote server:muhtemelen bu nedenle bir hata alıyor .
sysadmin1138

Hrm .. temel düzeninizi ve ithalat yapınızı yeniden yarattı ve sorunu tekrar oluşturamadı (on 2.7.1). Boş dahil olmaktan vazgeçmek güvenli olmalı custommod- belki de init.pptamamen silmeyi denemelisiniz , gerekmediği gibi.
Shane Madden

@ShaneMadden Bunu denedikten sonra, bir sonraki adım atmak straceve hangi dosyaları bu şekilde okumaya çalıştığını anlamaya çalışmak.
sysadmin1138

Yanıtlar:


32

Yani ... bu biraz utanç verici, ama ...

Ortamları.

Benim /etc/puppet.confdosyamda şurada:

[master]
  manifest=$confdir/manifests/site.pp
  modulepath=$confdir/environments/$environment/modules:$confdir/modules

straceNerede dosyalar için avlandığını bulmak için attıktan sonra bir şey farkettim. Altında custommod arıyordu /etc/puppet/environments/production/modulesve orada bir dizin olduğundan (boş), o zaman kontrol gitmedi/etc/puppet/modules . Görünüşe göre, bir modülü içe aktarırken, dosya varlığı (init.pp) yerine dizin varlığını kontrol eder.

O boş dizini kaldırın, işler çalışmaya başlar.

Kukla ajanını farklı bir ortam kullanarak çalıştır, işler çalışmaya başlar.

Hikayeden çıkarılacak ders:

Kukla Çevre yolları bash $ PATH gibi davranmaz.


8
Ve eğer biri modulepat'larını açıkça kukla.conf'ta tanımlamamışsa ve kuklanın modulepatını kınamaya başvurmadan bulmak isteyebilirlerse, koşabilirler puppet config print modulepath.
Alison R.

1
Bunun kuklacılara bildirildiği oldu mu?
Felipe Alvarez

3
Modulepath şimdi bir kullanımdan kaldırma uyarısını tetikler.
Magellan

4

Bu aynı sorunu yaşadım, ancak farklı bir düzeltme yaptım

Eğer böyle bir kukla modül oluşturursanız:

puppet module generate foo-example_module

Ad alanı example_moduleile adlandırılmış bir modül oluşturacaktır foo. Tüm bildiriler adı verilen bir dizinin içinde olacakfoo-example_module

İnit.pp dosyasında tanımlanan sınıfın adının, klasör adıyla aynı olması gerekir.

Basit düzeltme:

mv foo-example_module example_module

Eğer kukla ipini çalıştırırsanız, aşağıdaki mesajla sizi uyaracaktır:

ERROR: example_module not in autoload module layout on line 42

R10k veya kütüphaneci-kuklalı bir Puppet dosyası kullanıyorsanız, dosyaların modül dizininizde 'foo' öneki olmadan yerleştirilmesi için ad alanını kaldırmanız da gerekebilir.

önce:

mod 'foo-example_module',
    :git => git@github.com:foo/example_module'

sonra:

mod 'example_module',
    :git => git@github.com:foo/example_module'


0

Fedora için kukla 3.7.1 ile benzer bir sorunla karşılaştım: my.server için sınıf kukla bulunamadı

Çözüm:

sudo ln -s /my/local/copy/puppet/modules /etc/puppet/

Sonra çalışıyor.


0

Ben de benzer bir problem yaşadım. Benim durumumda sınıf ismi "onehost :: change_IoT_password_reminder" idi. Strace kullandıktan sonra kuklanın bir modül / onehost / manifests / change_iot_password_reminder.pp dosyasını aradığını öğrendim. Sınıf adlarında büyük harf kullanmak, sınıfın ilk harfi olmasa bile iyi bir fikir değildir.

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.