পুতুলকে প্রথমে কিছু নির্দিষ্ট কাজ করতে বাধ্য করার কোনও উপায় আছে কি? উদাহরণস্বরূপ, আমার যে কোনও প্যাকেজ ইনস্টল করার আগে আমার ইউম রিপোজিটরি (আইইউএস সম্প্রদায়) যুক্ত করার জন্য সমস্ত সার্ভারে একটি আরপিএম ইনস্টল করা দরকার।
পুতুলকে প্রথমে কিছু নির্দিষ্ট কাজ করতে বাধ্য করার কোনও উপায় আছে কি? উদাহরণস্বরূপ, আমার যে কোনও প্যাকেজ ইনস্টল করার আগে আমার ইউম রিপোজিটরি (আইইউএস সম্প্রদায়) যুক্ত করার জন্য সমস্ত সার্ভারে একটি আরপিএম ইনস্টল করা দরকার।
উত্তর:
আপনি যদি নিশ্চিত করতে চান যে আপনার সমস্ত সার্ভারে একটি সংগ্রহস্থল ইনস্টল করা আছে তবে আমি এর মতো কিছু প্রস্তাব করব
node default {
include base
}
class base {
yumrepo { "IUS":
baseurl => "http://dl.iuscommunity.org/pub/ius/stable/$operatingsystem/$operatingsystemrelease/$architecture",
descr => "IUS Community repository",
enabled => 1,
gpgcheck => 0
}
}
তারপরে, প্রসারিত যে কোনও নোডের জন্য base
আপনি বলতে পারেন
class foo {
package { "bar": ensure => installed, require => Yumrepo["IUS"] }
}
এটি এটি নিশ্চিত করবে
bar
আইওএস সংগ্রহস্থল সংজ্ঞায়িত না করা হলে প্যাকেজটি ইনস্টল করা হবে নাযদিও পর্যায়গুলি এটি পরিচালনা করতে পারে এবং নির্দিষ্ট ইয়ম রেপো নির্ভরতাগুলি পরিচালনা করতে পারে তবে উত্সাহের সাথে সম্পর্কটি ঘোষণা করা আরও ভাল।
স্রেফ Yumrepo <| |> -> Package <| provider != 'rpm' |>
আপনার পুতুলের ম্যানিফেস্টে রাখুন।
node default {
Yumrepo <| |> -> Package <| provider != 'rpm' |>
}
এটি এটিকে এমন করে তোলে যাতে সমস্ত ইয়ামেরপো প্রকারগুলি যে কোনও প্যাকেজগুলির সরবরাহকারীর হিসাবে 'আরপিএম' নেই তার আগে প্রক্রিয়াজাত হয়ে যায়। এই পরবর্তী বর্জনটি হ'ল আমি ইয়াম রেপো ইনস্টল করতে সহায়তা করার জন্য (উদাহরণস্বরূপ) এপেল-রিলিজ আরপিএম প্যাকেজটি ব্যবহার করতে পারি।
(আমি প্রায় একই উত্তর দেওয়ার পরে আমি এই প্রশ্নটি পেয়েছি .. সুতরাং ভেবেছিলাম আমার উত্তরটিও এখানে প্রযোজ্য এবং এটি পুনরাবৃত্তি করা ভাল (দুটি জায়গায় উত্তর পাওয়া নিরাপদ ..)
যতদূর আমি বুঝতে পেরেছি, এটি ঠিক একই ধাপগুলির জন্য - তারা আপনাকে গ্রুপবদ্ধ এবং শ্রেণি মৃত্যুদণ্ডের আদেশ দেয়। আমি ডেবিয়ান সার্ভারগুলিতে এপিটি আপডেট এবং কনফিগার করতে "পর্যায়" ব্যবহার করি যা আপনি ইউইউএমের সাথে যা করতে যাচ্ছেন তার সাথে খুব মিল থাকতে হবে।
প্রথমত, আপনি শীর্ষ স্তরে "yum" পর্যায়টি ঘোষণা করেন (উপরে "নোডগুলি"), যাতে "yum" পর্যায়ে ক্লাসগুলি "প্রধান" এর আগে কার্যকর করা হবে:
stage { 'yum' : before => Stage['main'] }
তারপরে, আপনি ক্লাসগুলিতে মঞ্চ বরাদ্দ করেন। আপনি আপনার নোড সংজ্ঞায় এটি করতে পারেন:
node default {
class { 'yumrepos' : stage => yum }
include packages
}
আপনার মূল কীটি ব্যবহার করতে হবে তা হল প্রয়োজনীয় কীওয়ার্ড - "নির্ভরযোগ্যতা হিসাবে প্রয়োজনীয় শ্রেণিটি যুক্ত করে এক বা একাধিক ক্লাস মূল্যায়ন করুন।"
অ্যাপ্লিকেশন সংগ্রহস্থলের ব্যবহারের উদাহরণ হতে পারে:
class installcustompackages {
# make sure we have the repository file and public key
file { "/etc/apt/sources.list.d/myrepo.list":
source => "puppet://puppet/files/etc/apt/sources.list.d/myrepo.list",
ensure => present;
"/etc/apt/trusted.gpg":
source => "puppet://puppet/files/etc/apt/trusted.gpg",
}
# do an update whenever the list or trusted key file change
exec { "/usr/bin/apt-get update":
alias => "aptgetupdate",
require => [ File["/etc/apt/sources.list.d/myrepo.list"], File["/etc/apt/trusted.gpg"] ],
subscribe => [ File["/etc/apt/sources.list.d/myrepo.list"], File["/etc/apt/trusted.gpg"] ],
refreshonly => true;
}
package { "mypackage":
ensure => latest,
require => Exec["aptgetupdate"];
"mypackage2":
ensure => latest,
require => Exec["aptgetupdate"];
}
service { "myservice":
enable => false,
require => Package[mypackage];
}
}
( পুতুল বুটস্ট্র্যাপিংয়ের এই উদাহরণ থেকে গৃহীত )।
সুতরাং আপনি দেখতে পাচ্ছেন যে প্রতিটি স্তরের জন্য পূর্বেরটি প্রথমে করা দরকার। আমি আপনাকে এটি কীভাবে এটি প্রয়োগ করতে হয় তা সম্পর্কে কাজ করার জন্য ছেড়ে দেব কারণ এটি ফাইলগুলি কোথায় সঞ্চয় করে তা সম্পর্কে আমি পরিচিত নই।
পুতুল কনফিগারেশনটি উপর থেকে নীচে থেকে পড়ে, তাই আপনি যদি এই শ্রেণিতে প্রথমে ইয়াম রেপো সহ কোনও শ্রেণি অন্তর্ভুক্ত করেন তবে অন্য কোনও কিছুর আগে এই রেপো যুক্ত করা হবে।
আপনি যদি কোনও প্যাকেজে প্রয়োজনীয় সেটিংস ব্যবহার করেন তবে আপনি নিশ্চিত করবেন যে প্যাকেজ যুক্ত করার আগে প্রয়োজনীয় সংস্থান টাইপ উপস্থিত রয়েছে, যেমন:
node 'yournode.domain.com' {
package { "bar": ensure => installed, require => Yumrepo["IUS"] }
yumrepo { "IUS":
baseurl => "http://dl.iuscommunity.org/pub/ius/stable/$operatingsystem/$operatingsystemrelease/$architecture",
descr => "IUS Community repository",
enabled => 1,
gpgcheck => 0
}
}
উপরের এই কোডটি প্যাকেজ যুক্ত করার আগে রেপো যুক্ত করবে।
require
কীওয়ার্ডটি ব্যবহার করুন যা আপনি দ্বিতীয় অংশে করেছেন।
এরকম কিছু আমার জন্য কাজ করেছে:
yumrepo { A:
descr => "A repo",
baseurl => '',
enabled => 1,
gpgcheck => 1,
gpgkey => "",
priority => 3
}
yumrepo { B:
descr => "B repo",
baseurl => '',
enabled => 1,
gpgcheck => 1,
gpgkey => "",
priority => 3
}
yumrepo { C:
descr => "C repo",
baseurl => '',
enabled => 1,
gpgcheck => 1,
gpgkey => "",
priority => 3;
}
Package {
require => [Yumrepo[A], Yumrepo[B], Yumrepo[C]]
}
আমি mysite.pp এ এই জাতীয় কিছু অন্তর্ভুক্ত করেছি। এইভাবে, আপনার পুতুল মডিউলগুলি, ইউম রেপোসের উল্লেখ ছাড়াই।