আমি কীভাবে পুতুলের সাথে একটি ইয়াম প্যাকেজ গ্রুপ ইনস্টল করব?


10

পুতুলের একটি এক্স প্যাকেজ গ্রুপ (উদাহরণস্বরূপ 'বিকাশ সরঞ্জাম') ইনস্টল করার ছাড়াও কি উপায় আছে?

উত্তর:


11

আমি আজ অনুরূপ অনুরোধটি জুড়ে এসেছি, তবে বিষয়গুলি অন্য কোনও উপায়ে সমাধান করা সম্ভব হলে আমি একজন নির্বাহকের পক্ষে অনুরাগী নই। তাই আমি একটি আলাদা পথ বেছে নিয়েছি এবং 'ইয়ামগ্রুপ' এর জন্য একটি সাধারণ কাস্টম প্রকার লিখেছি। কেবলমাত্র এই ফাইলগুলি আপনার মডিউলপথের কোনও মডিউলে রাখুন এবং এটি হ'ল:

"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

উপভোগ করেন!


আমি মনে করি এটির yum_content = yum('grouplist')একটি দরকার .split("\n")যাতে .eachত্রুটি না ঘটে।
alex.pilon

@ অ্যালেক্স.পিলন টিপটির জন্য ধন্যবাদ। যদিও এটি ভি 3 তে এর মতো কাজ করছিল।
জাকভ সোসিক

4

এখানে একটি 'ইয়মগ্রুপ' পুতুল সংস্থান ধরণের সংজ্ঞা রয়েছে। এটি ডিফল্টরূপে ডিফল্ট এবং বাধ্যতামূলক প্যাকেজ ইনস্টল করে এবং 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


এর জন্য ধন্যবাদ! আমি yum_groupinstall নামে একটি মডিউল তৈরি করেছি এবং আপনার সংজ্ঞা এবং বিকাশ সরঞ্জাম গোষ্ঠী ইনস্টল করার জন্য একটি ক্লাসের সাথে একটি init.pp প্রকাশ তৈরি করেছি। নোট করুন যে আমাকে গ্রুপের নামটি উদ্ধৃত করতে হয়েছিল: class yum_groupinstalls { yumgroup { '"Development tools"': } } সংজ্ঞায় আমাকে আমাকে ইউএমের পুরো পথটি নির্দিষ্ট করতে হয়েছিল যা সেন্টোস 6.২ এ আমার জন্য / ইউএসআর / বিন / ইয়াম ছিল।
ব্যাঞ্জার

3

প্যাকেজ টাইপের জন্য পুতুল প্রকারের রেফারেন্সে আমি কিছু খুঁজে পাইনি , তাই আমি ফ্রিওনডের পুতুল আইআরসি চ্যানেলে জিজ্ঞাসা করেছি (# পপেট, অদ্ভুতভাবে) সুতরাং উত্তরটি "এখনও হয়নি" বলে আমি মনে করি।


3

প্রয়োজনীয় গ্রুপ ইনস্টলটি সম্পাদন করতে আপনি একটি পুতুল এক্সিকিউট টাইপের মাধ্যমে এটি পরিচালনা করতে পারেন। আমি অবশ্যই একটি ভাল onlyifবা unlessবিকল্প অন্তর্ভুক্ত করে নিশ্চিত করব যাতে এটি কেবল প্রয়োজন হলে এটি কার্যকর করে দেয় বা সেট হয়ে যায় refreshonlyএবং এটির মাধ্যমে ট্রিগার করে Notifyযাতে এটি প্রতিবার চালিত হয় না। এই Execধরণটি আপনার জন্য পুতুল ক্লায়েন্টে স্থানীয়ভাবে কমান্ডটি কার্যকর করবে যদি তা ট্রিগার হয়।


1

আমি একটি কাস্টম সংস্থান সহ সমাধানটি পছন্দ করি তবে এটি আদর্শবান নয়। আমার গ্রহণ কি বিদ্যমান? ফাংশন:

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