ক্লাস খুঁজে পাওয়া যায় নি, এবং এখনও আছে


31

puppet agentএকটি নতুন চিত্র থেকে কল করার সময় , আমি একটি err: Could not find class custommodত্রুটি পাচ্ছি । মডিউলটি /etc/puppet/modules/custommodআমরা যে সমস্ত মডিউলকে কল করছি সেগুলির মতোই তবে এটি একটি বাধা one

[Site.pp]

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

যখন পুতুলমাস্টার ডিবাগ আউটপুট দিয়ে চালিত হয়, তখন এটি স্পষ্টভাবে বেস এবং কার্লের জন্য তথ্য সন্ধান করে:

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

84 লাইন হয় include custommod

একটি সংক্ষিপ্ত ডিরেক্টরি এবং ফাইল কাঠামো:

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

আমি বানান পরীক্ষা করেছিলাম:}

init.ppকাস্টমমড ডিরেক্টরিতে থাকা সামগ্রীর সামগ্রীটি সম্পূর্ণ অচিহ্নিতযোগ্য:

class custommod {
}

অভিপ্রায়টি হ'ল অ্যাপস পিপি ফাইলের জন্য একটি খালি ক্লাস তৈরি করা, যা মাংস সেখানে।

class custommod::apps {

    [lots of stuff]
}

কেবলমাত্র, এটি অ্যাপস ফাইলে কখনও আসবে না। আমি যদি মন্তব্য করি include custommodতবে class{ "custommod::apps": frontend => "false}পরিবর্তে উপরের ত্রুটিটি লাইনে উত্পন্ন হয়েছে ।

এই ত্রুটিটি কীভাবে উত্পন্ন হচ্ছে তা জানতে আমি আমার শিকারে কী অনুপস্থিত? আমার লক্ষ্য রাখতে হবে যে এটি স্থানীয়ভাবে চালিত হলে এই রেপো ঠিকঠাক কাজ করে puppet apply


আপনার ক্লাসটি উপস্থিত আছে কিনা তা জানতে আপনি ক্লায়েন্ট ইয়ামল ফাইলটিতে একটি শীর্ষ স্থান নিয়েছেন?
জোরডেচে

@ জোরেডাচে / var / lib / পুতুল / ক্লায়েন্ট_আইএমএল / ডিরেক্টরি ক্লায়েন্টের ফাঁকা। ক্লায়েন্ট একটি could not retrieve catalog from remote server:ত্রুটি পাচ্ছে যা সম্ভবত এই কারণেই।
sysadmin1138

এইচআরএম .. আপনার বেসিক লেআউট এবং আমদানি কাঠামোটি পুনরায় তৈরি করেছে এবং সমস্যাটি পুনরুত্পাদন করতে পারেনি (২.7.১-এ)। খালি অন্তর্ভুক্ত করা বন্ধ করা নিরাপদ হওয়া উচিত custommod- এমনকি init.ppএটি সম্পূর্ণরূপে মোছার চেষ্টাও করা উচিত, কারণ এটির প্রয়োজন হয় না।
শেন ম্যাডেন

@ শানেমডেন আমি চেষ্টা করার পরে, আমার পরবর্তী পদক্ষেপটি এটি নিক্ষেপ করা straceএবং এটি কী ফাইলগুলি সেভাবে পড়ার চেষ্টা করছে তা নির্ধারণের চেষ্টা করা।
sysadmin1138

উত্তর:


32

সুতরাং ... এটি কিছুটা বিব্রতকর, তবে ...

পরিবেশের।

ঠিক আমার /etc/puppet.confফাইলটিতে এটি রয়েছে:

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

straceএটি ফাইলগুলির জন্য কোথায় শিকার করছে তা নির্ধারণ করার জন্য এটি নিক্ষেপ করার পরে আমি কিছু লক্ষ্য করেছি। এটি নীচে কাস্টমমড খুঁজছিল /etc/puppet/environments/production/modules, এবং যেহেতু সেখানে একটি ডিরেক্টরি ছিল (খালি), এটি তখন চেক হয় নি/etc/puppet/modules । দৃশ্যত কোনও মডিউল আমদানি করার সময় এটি ফাইল-উপস্থিতি (init.pp) এর পরিবর্তে ডিরেক্টরি-উপস্থিতি পরীক্ষা করে।

সেই খালি ডিরেক্টরিটি সরান, জিনিসগুলি কাজ শুরু করে।

একটি পৃথক পরিবেশ ব্যবহার করে পুতুল এজেন্ট চালান, জিনিসগুলি কাজ শুরু করে।

গল্পের শিক্ষা:

পুতুল পরিবেশের পাথগুলি বাশ-পাথের মতো কাজ করে না।


8
এবং যদি কেউ তাদের মডিউলপথ স্পষ্টভাবে পুতুলপ্যাকফের মধ্যে সংজ্ঞায়িত না করে এবং তারা পুতুলের মডিউলপথটি স্ট্রেসের অবলম্বন না করে সন্ধান করতে চায় তবে তারা চালাতে পারে puppet config print modulepath
অ্যালিসন আর

1
এই পুতুলকে রিপোর্ট করা হয়েছে?
ফিলিপ আলভারেজ

3
মডিউলপথটি এখন হ্রাসের সতর্কতা ট্রিগার করে।
ম্যাগেলান

4

আমি এই একই সমস্যার মধ্যে দৌড়েছি, তবে অন্যরকম ঠিক করেছিলাম

আপনি যদি এর মতো একটি পুতুল মডিউল তৈরি করেন:

puppet module generate foo-example_module

এটি নামের জায়গার example_moduleসাথে নামযুক্ত একটি মডিউল তৈরি করবে foo। সমস্ত ম্যানিফাইস্টগুলি একটি ডিরেক্টরি বলা তথ্যের ভিতরে থাকবেfoo-example_module

Init.pp এ সংজ্ঞায়িত শ্রেণীর নাম ফোল্ডারের নামের সাথে একই হওয়া দরকার।

সাধারণ ফিক্স:

mv foo-example_module example_module

যদি আপনি পুতুল-লিন্ট চালনা করেন তবে এটি নীচের বার্তার সাথে সতর্ক করবে

ERROR: example_module not in autoload module layout on line 42

যদি r10k বা লাইব্রেরিয়ান-পুতুলের সাথে একটি পুতুলফিট ব্যবহার করে থাকেন তবে আপনাকে নাম স্থানও সরিয়ে ফেলতে হবে যাতে ফাইলগুলি আপনার মডিউল ডিরেক্টরিতে 'foo' উপসর্গ ছাড়াই স্থাপন করতে পারে।

আগে:

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

পরে:

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

2

আপনার মডিউলটির একটি অবৈধ metadata.jsonফাইল থাকাতে আর একটি সমস্যা হতে পারে ।

metadata.jsonফাইলটিতে সমস্ত প্রয়োজনীয় ক্ষেত্র রয়েছে তা নিশ্চিত করুন ( https://docs.puppet.com/puppet/latest/references/modules_metadata.html#allowed-keys-in-metadatajson দেখুন )


0

ফেডোরার জন্য পুতুলের 3.7.1 এর সাথে একই ধরণের সমস্যায় পড়ে: আমার.সভারটির জন্য ক্লাস পুতুল খুঁজে পাওয়া যায়নি

সমাধান:

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

তারপরে এটি কাজ করে।


0

আমারও একই সমস্যা ছিল। আমার ক্ষেত্রে শ্রেণীর নাম ছিল "ওয়ানহোস্ট :: চেঞ্জ_আইওT_ পাসওয়ার্ড_মাইন্ডার"। স্ট্রেস ব্যবহার করার পরে আমি দেখতে পেলাম যে পুতুল একটি মডিউল / ওয়ানহোস্ট / ম্যানিফেষ্ট / চেঞ্জ_আইট_পাসওয়ার্ড_রিমেন্ডার.পিপি ফাইল খুঁজছেন। ক্লাসের নামগুলিতে বড় হাতের অক্ষর ব্যবহার করা ভাল ধারণা নয়, এমনকি এটি শ্রেণীর প্রথম অক্ষর না হলেও।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.