অন্য কিছু করার আগে পুতুলের সাথে একটি ইয়াম রেপো যুক্ত করা


26

পুতুলকে প্রথমে কিছু নির্দিষ্ট কাজ করতে বাধ্য করার কোনও উপায় আছে কি? উদাহরণস্বরূপ, আমার যে কোনও প্যাকেজ ইনস্টল করার আগে আমার ইউম রিপোজিটরি (আইইউএস সম্প্রদায়) যুক্ত করার জন্য সমস্ত সার্ভারে একটি আরপিএম ইনস্টল করা দরকার।


আরও জটিল ব্যবহারের ক্ষেত্রে, আমার সম্পর্কিত প্রশ্নটিও দেখুন
ম্যাট ম্যাকক্লিউর

উত্তর:


37

আপনি যদি নিশ্চিত করতে চান যে আপনার সমস্ত সার্ভারে একটি সংগ্রহস্থল ইনস্টল করা আছে তবে আমি এর মতো কিছু প্রস্তাব করব

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আইওএস সংগ্রহস্থল সংজ্ঞায়িত না করা হলে প্যাকেজটি ইনস্টল করা হবে না
  • আইওএস সংগ্রহস্থল সংজ্ঞায়িত হওয়ার আগে প্যাকেজটি ইনস্টল করার চেষ্টা করবে না

আহ, ঠিক আছে. এটি বেশ দুর্দান্ত। আমি সেখানে ইয়মরেপো দেখিনি - ধন্যবাদ!
জন হাদাদাদ

এটি কেবল ড্রেসগুলি নিয়ে কাজ করে যা ইউ ব্যবহার করে, সুতরাং কেবল রেল 5, রেল 4 নয়
ডেভ চেনি

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

17

যদিও পর্যায়গুলি এটি পরিচালনা করতে পারে এবং নির্দিষ্ট ইয়ম রেপো নির্ভরতাগুলি পরিচালনা করতে পারে তবে উত্সাহের সাথে সম্পর্কটি ঘোষণা করা আরও ভাল।

স্রেফ Yumrepo <| |> -> Package <| provider != 'rpm' |>আপনার পুতুলের ম্যানিফেস্টে রাখুন।

node default {
  Yumrepo <| |> -> Package <| provider != 'rpm' |>
}

এটি এটিকে এমন করে তোলে যাতে সমস্ত ইয়ামেরপো প্রকারগুলি যে কোনও প্যাকেজগুলির সরবরাহকারীর হিসাবে 'আরপিএম' নেই তার আগে প্রক্রিয়াজাত হয়ে যায়। এই পরবর্তী বর্জনটি হ'ল আমি ইয়াম রেপো ইনস্টল করতে সহায়তা করার জন্য (উদাহরণস্বরূপ) এপেল-রিলিজ আরপিএম প্যাকেজটি ব্যবহার করতে পারি।


8

(আমি প্রায় একই উত্তর দেওয়ার পরে আমি এই প্রশ্নটি পেয়েছি .. সুতরাং ভেবেছিলাম আমার উত্তরটিও এখানে প্রযোজ্য এবং এটি পুনরাবৃত্তি করা ভাল (দুটি জায়গায় উত্তর পাওয়া নিরাপদ ..)

যতদূর আমি বুঝতে পেরেছি, এটি ঠিক একই ধাপগুলির জন্য - তারা আপনাকে গ্রুপবদ্ধ এবং শ্রেণি মৃত্যুদণ্ডের আদেশ দেয়। আমি ডেবিয়ান সার্ভারগুলিতে এপিটি আপডেট এবং কনফিগার করতে "পর্যায়" ব্যবহার করি যা আপনি ইউইউএমের সাথে যা করতে যাচ্ছেন তার সাথে খুব মিল থাকতে হবে।

প্রথমত, আপনি শীর্ষ স্তরে "yum" পর্যায়টি ঘোষণা করেন (উপরে "নোডগুলি"), যাতে "yum" পর্যায়ে ক্লাসগুলি "প্রধান" এর আগে কার্যকর করা হবে:

stage { 'yum' : before => Stage['main'] }

তারপরে, আপনি ক্লাসগুলিতে মঞ্চ বরাদ্দ করেন। আপনি আপনার নোড সংজ্ঞায় এটি করতে পারেন:

node default {
  class { 'yumrepos' : stage => yum }

  include packages
}

এর জন্য ধন্যবাদ :) আমি স্বীকৃত উত্তরের জন্য ব্যক্তিগতভাবে এই পদ্ধতির পছন্দ করি।
মাইকেল মায়ার

5

আপনি ট্যাগ ব্যবহার করতে পারেন । এটি আপনাকে রেপো ইনস্টলার firstrunবা অন্য কোনও কিছুতে ট্যাগ করার অনুমতি দেবে ,

তারপর চালান

 puppetd --tags firstrun

এবং এটি কেবল ট্যাগের সাথে মডিউল / বিবৃতি কার্যকর করতে পারে।


আমি ঠিক তাই খুঁজছিলাম - ধন্যবাদ টম!
জন হাদাদ

3

আপনার মূল কীটি ব্যবহার করতে হবে তা হল প্রয়োজনীয় কীওয়ার্ড - "নির্ভরযোগ্যতা হিসাবে প্রয়োজনীয় শ্রেণিটি যুক্ত করে এক বা একাধিক ক্লাস মূল্যায়ন করুন।"

অ্যাপ্লিকেশন সংগ্রহস্থলের ব্যবহারের উদাহরণ হতে পারে:

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];
   }
}

( পুতুল বুটস্ট্র্যাপিংয়ের এই উদাহরণ থেকে গৃহীত )।

সুতরাং আপনি দেখতে পাচ্ছেন যে প্রতিটি স্তরের জন্য পূর্বেরটি প্রথমে করা দরকার। আমি আপনাকে এটি কীভাবে এটি প্রয়োগ করতে হয় তা সম্পর্কে কাজ করার জন্য ছেড়ে দেব কারণ এটি ফাইলগুলি কোথায় সঞ্চয় করে তা সম্পর্কে আমি পরিচিত নই।


0

পুতুল কনফিগারেশনটি উপর থেকে নীচে থেকে পড়ে, তাই আপনি যদি এই শ্রেণিতে প্রথমে ইয়াম রেপো সহ কোনও শ্রেণি অন্তর্ভুক্ত করেন তবে অন্য কোনও কিছুর আগে এই রেপো যুক্ত করা হবে।

আপনি যদি কোনও প্যাকেজে প্রয়োজনীয় সেটিংস ব্যবহার করেন তবে আপনি নিশ্চিত করবেন যে প্যাকেজ যুক্ত করার আগে প্রয়োজনীয় সংস্থান টাইপ উপস্থিত রয়েছে, যেমন:

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
   }
}

উপরের এই কোডটি প্যাকেজ যুক্ত করার আগে রেপো যুক্ত করবে।


10
পুতুল একটি ঘোষিত ভাষা ব্যবহার করে, সুতরাং এটি ফাইলের জিনিসগুলির ক্রম নিয়ে চিন্তা করে না । আপনার প্রথম অনুচ্ছেদে ভুল আমি ভয় করি। এটি করার সঠিক উপায়টি হ'ল requireকীওয়ার্ডটি ব্যবহার করুন যা আপনি দ্বিতীয় অংশে করেছেন।
হামিশ ডাউনার

0

এরকম কিছু আমার জন্য কাজ করেছে:

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 এ এই জাতীয় কিছু অন্তর্ভুক্ত করেছি। এইভাবে, আপনার পুতুল মডিউলগুলি, ইউম রেপোসের উল্লেখ ছাড়াই।

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