উত্তর:
আমি আজ অনুরূপ অনুরোধটি জুড়ে এসেছি, তবে বিষয়গুলি অন্য কোনও উপায়ে সমাধান করা সম্ভব হলে আমি একজন নির্বাহকের পক্ষে অনুরাগী নই। তাই আমি একটি আলাদা পথ বেছে নিয়েছি এবং 'ইয়ামগ্রুপ' এর জন্য একটি সাধারণ কাস্টম প্রকার লিখেছি। কেবলমাত্র এই ফাইলগুলি আপনার মডিউলপথের কোনও মডিউলে রাখুন এবং এটি হ'ল:
"ModuleName / lib / অনুপস্থিত পুতুল / প্রদানকারী / yumgroup / default.rb"
Puppet::Type.type(:yumgroup).provide(:default) do
desc 'Support for managing the yum groups'
commands :yum => '/usr/bin/yum'
# TODO
# find out how yum parses groups and reimplement that in ruby
def self.instances
groups = []
# get list of all groups
yum_content = yum('grouplist').split("\n")
# turn of collecting to avoid lines like 'Loaded plugins'
collect_groups = false
# loop through lines of yum output
yum_content.each do |line|
# if we get to 'Available Groups:' string, break the loop
break if line.chomp =~ /Available Groups:/
# collect groups
if collect_groups and line.chomp !~ /(Installed|Available)/
current_name = line.chomp.sub(/^\s+/,'\1').sub(/ \[.*\]/,'')
groups << new(
:name => current_name,
:ensure => :present
)
end
# turn on collecting when the 'Installed Groups:' is reached
collect_groups = true if line.chomp =~ /Installed Groups:/
end
groups
end
def self.prefetch(resources)
instances.each do |prov|
if resource = resources[prov.name]
resource.provider = prov
end
end
end
def create
yum('-y', 'groupinstall', @resource[:name])
@property_hash[:ensure] == :present
end
def destroy
yum('-y', 'groupremove', @resource[:name])
@property_hash[:ensure] == :absent
end
def exists?
@property_hash[:ensure] == :absent
end
end
"ModuleName / lib / অনুপস্থিত পুতুল / প্রকার / yumgroup.rb"
Puppet::Type.newtype(:yumgroup) do
@doc = "Manage Yum groups
A typical rule will look like this:
yumgroup { 'Development tools':
ensure => present,
}
"
ensurable
newparam(:name) do
isnamevar
desc 'The name of the group'
end
end
এবং তারপরে, প্লাগিনসিনকে সক্ষম দিয়ে পুতুল এজেন্ট চালান, এবং আপনি এর মতো কাস্টম প্রকার ব্যবহার করতে পারেন:
yumgroup {'Base': ensure => present, }
বা:
yumgroup {'Development tools': ensure => absent, }
এবং আপনি দেখতে পাচ্ছেন কোন গ্রুপগুলি চালিয়ে ইনস্টল করা হয়েছে:
puppet resource yumgroup
উপভোগ করেন!
এখানে একটি 'ইয়মগ্রুপ' পুতুল সংস্থান ধরণের সংজ্ঞা রয়েছে। এটি ডিফল্টরূপে ডিফল্ট এবং বাধ্যতামূলক প্যাকেজ ইনস্টল করে এবং packagesচ্ছিক প্যাকেজ ইনস্টল করতে পারে।
এই সংজ্ঞাটি ইউম গোষ্ঠীগুলি এখনও সরাতে পারে না যদিও এটি করা সহজ হওয়া সহজ হবে। আমি নিজের জন্য বিরক্ত করিনি কারণ এটি নির্দিষ্ট পরিস্থিতিতে পুতুলের মধ্যে লুপ তৈরি করতে পারে।
এই ধরণের জন্য yum-downloadonly আরপিএম ইনস্টল করা প্রয়োজন এবং আমি মনে করি এটি কেবল আরএইচইএল / সেন্টস / এসএল 6 এ কাজ করে I আমি এটি লেখার সময়, পূর্ববর্তী সংস্করণগুলিতে ইয়ামের প্রস্থান স্থিতিগুলি ভুল ছিল তাই 'যদি না' প্যারামিটারটি কাজ না করে আউটপুট জন্য গ্রেপ প্রসারিত না করে।
define yumgroup($ensure = "present", $optional = false) {
case $ensure {
present,installed: {
$pkg_types_arg = $optional ? {
true => "--setopt=group_package_types=optional,default,mandatory",
default => ""
}
exec { "Installing $name yum group":
command => "yum -y groupinstall $pkg_types_arg $name",
unless => "yum -y groupinstall $pkg_types_arg $name --downloadonly",
timeout => 600,
}
}
}
}
আমি ইচ্ছাকৃতভাবে yum-downloadonly নির্ভরতা তৈরি বাদ দিয়েছি কারণ এটি অন্যের প্রকাশের সাথে দ্বন্দ্ব হতে পারে। আপনি যদি এটি করতে চান তবে yum-downloadonly প্যাকেজটি একটি পৃথক ম্যানিফেস্টে ঘোষণা করুন এবং এটি এই সংজ্ঞায়িতের মধ্যে অন্তর্ভুক্ত করুন। এই সংজ্ঞায়িতভাবে সরাসরি ঘোষণা করবেন না অন্যথায় যদি আপনি এই রিসোর্স টাইপটি একাধিকবার ব্যবহার করেন তবে পুতুল একটি ত্রুটি দেবে। এক্সিকিউট রিসোর্সের পরে প্যাকেজ ['yum-downloadonly'] প্রয়োজন require
class yum_groupinstalls { yumgroup { '"Development tools"': } }
সংজ্ঞায় আমাকে আমাকে ইউএমের পুরো পথটি নির্দিষ্ট করতে হয়েছিল যা সেন্টোস 6.২ এ আমার জন্য / ইউএসআর / বিন / ইয়াম ছিল।
প্যাকেজ টাইপের জন্য পুতুল প্রকারের রেফারেন্সে আমি কিছু খুঁজে পাইনি , তাই আমি ফ্রিওনডের পুতুল আইআরসি চ্যানেলে জিজ্ঞাসা করেছি (# পপেট, অদ্ভুতভাবে) সুতরাং উত্তরটি "এখনও হয়নি" বলে আমি মনে করি।
প্রয়োজনীয় গ্রুপ ইনস্টলটি সম্পাদন করতে আপনি একটি পুতুল এক্সিকিউট টাইপের মাধ্যমে এটি পরিচালনা করতে পারেন। আমি অবশ্যই একটি ভাল onlyif
বা unless
বিকল্প অন্তর্ভুক্ত করে নিশ্চিত করব যাতে এটি কেবল প্রয়োজন হলে এটি কার্যকর করে দেয় বা সেট হয়ে যায় refreshonly
এবং এটির মাধ্যমে ট্রিগার করে Notify
যাতে এটি প্রতিবার চালিত হয় না। এই Exec
ধরণটি আপনার জন্য পুতুল ক্লায়েন্টে স্থানীয়ভাবে কমান্ডটি কার্যকর করবে যদি তা ট্রিগার হয়।
আমি একটি কাস্টম সংস্থান সহ সমাধানটি পছন্দ করি তবে এটি আদর্শবান নয়। আমার গ্রহণ কি বিদ্যমান? ফাংশন:
Puppet::Type.type(:yumgroup).provide(:default) do
desc 'Support for managing the yum groups'
commands :yum => '/usr/bin/yum'
# TODO
# find out how yum parses groups and reimplement that in ruby
def self.instances
groups = []
# get list of all groups
yum_content = yum('grouplist')
# turn of collecting to avoid lines like 'Loaded plugins'
collect_groups = false
# loop through lines of yum output
yum_content.each do |line|
# if we get to 'Available Groups:' string, break the loop
break if line.chomp =~ /Available Groups:/
# collect groups
if collect_groups and line.chomp !~ /(Installed|Available)/
current_name = line.chomp.sub(/^\s+/,'\1').sub(/ \[.*\]/,'')
groups << new(
:name => current_name,
:ensure => :present
)
end
# turn on collecting when the 'Installed Groups:' is reached
collect_groups = true if line.chomp =~ /Installed Groups:/
end
groups
end
def self.prefetch(resources)
instances.each do |prov|
if resource = resources[prov.name]
resource.provider = prov
end
end
end
def create
yum('-y', 'groupinstall', @resource[:name])
@property_hash[:ensure] == :present
end
def destroy
yum('-y', 'groupremove', @resource[:name])
@property_hash[:ensure] == :absent
end
def exists?
cmd = "/usr/bin/yum grouplist hidden \"" + @resource[:name] + "\" | /bin/grep \"^Installed\" > /dev/null"
system(cmd)
$?.success?
end
end
yum_content = yum('grouplist')
একটি দরকার.split("\n")
যাতে.each
ত্রুটি না ঘটে।