Thêm một repo yum vào con rối trước khi làm bất cứ điều gì khác


26

Có cách nào để buộc con rối làm những việc nhất định trước không? Chẳng hạn, tôi cần nó để cài đặt RPM trên tất cả các máy chủ để thêm kho lưu trữ yum (Cộng đồng IUS) trước khi tôi cài đặt bất kỳ gói nào.


Đối với một trường hợp sử dụng phức tạp hơn, xem thêm câu hỏi liên quan của tôi .
Matt McClure

Câu trả lời:


37

Nếu bạn muốn đảm bảo một kho lưu trữ được cài đặt trên tất cả các máy chủ của bạn thì tôi sẽ đề xuất một cái gì đó như thế này

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

Sau đó, đối với bất kỳ nút nào mở rộng, basebạn có thể nói

class foo {
   package { "bar": ensure => installed, require => Yumrepo["IUS"] }
}

Điều này sẽ đảm bảo rằng

  • Gói barsẽ không được cài đặt trừ khi kho lưu trữ IUS được xác định
  • Gói sẽ không cố cài đặt trước khi kho IUS được xác định

À, được rồi Điều này là khá tuyệt vời. Tôi không thấy yumrepo ở đó - cảm ơn!
Jon Haddad

Nó chỉ hoạt động với các distro sử dụng Yum, vì vậy Rhel5 chỉ, không phải Rhel4
Dave Cheney

2
Điều gì xảy ra nếu tôi không biết kho lưu trữ nào có gói? Ví dụ, một gói có thể có sẵn trong kho lưu trữ fedora trên Fedora và trong kho lưu trữ epel trên RHEL, CentOS, v.v. Điều này có nghĩa là nếu tôi sử dụng công thức / mô-đun của bên thứ 3, tôi sẽ phải tùy chỉnh nó.
Cristian Ciupitu

17

Mặc dù các giai đoạn có thể xử lý điều này và do đó có thể phụ thuộc yum repo cụ thể, tốt hơn là tuyên bố mối quan hệ một cách khái quát.

Chỉ cần đặt Yumrepo <| |> -> Package <| provider != 'rpm' |>trong bảng kê khai con rối của bạn.

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

Điều này làm cho nó sao cho tất cả các loại yumrepo sẽ được xử lý trước bất kỳ gói nào không có 'vòng / phút' là nhà cung cấp của chúng. Loại trừ sau này là để tôi có thể sử dụng gói RPM phát hành epel (ví dụ) để giúp cài đặt repo yum.


8

(Tôi đã tìm thấy câu hỏi này sau khi tôi trả lời gần giống nhau .. vì vậy tôi nghĩ rằng câu trả lời của tôi cũng áp dụng ở đây và nó đáng để lặp lại nó (an toàn hơn khi có câu trả lời ở hai nơi ..)

Theo như tôi hiểu, đây chính xác là những giai đoạn dành cho - họ cho phép bạn nhóm và ra lệnh thực hiện lớp. Tôi sử dụng "giai đoạn" để cập nhật và định cấu hình APT tại các máy chủ Debian, điều này rất giống với những gì bạn sẽ làm với YUM.

Trước hết, bạn khai báo giai đoạn "yum" ở cấp cao nhất (phía trên "nút"), để các lớp trong giai đoạn "yum" sẽ được thực hiện trước các giai đoạn "chính":

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

Sau đó, bạn chỉ định giai đoạn cho các lớp. Bạn có thể làm điều này ngay trong định nghĩa nút của bạn:

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

  include packages
}

Cảm ơn vì điều này :) Cá nhân tôi thích cách tiếp cận này với câu trả lời được chấp nhận.
Michael Mior

5

Bạn có thể sử dụng Thẻ . Điều này sẽ cho phép bạn gắn thẻ trình cài đặt repo với firstrunhoặc một cái gì đó,

sau đó chạy

 puppetd --tags firstrun

và nó sẽ chỉ thực hiện các mô-đun / câu lệnh khớp với thẻ.


Đây chính xác là những gì tôi đang tìm kiếm - cảm ơn Tom!
Jon Haddad

3

Điều quan trọng bạn cần sử dụng là từ khóa yêu cầu - "Đánh giá một hoặc nhiều lớp, thêm lớp bắt buộc làm phụ thuộc."

Một ví dụ sử dụng kho apt có thể là:

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

(Chuyển thể từ ví dụ này về việc khởi động con rối ).

Vì vậy, bạn có thể thấy mỗi giai đoạn yêu cầu rằng giai đoạn trước được thực hiện trước. Tôi sẽ để bạn tìm ra cách áp dụng điều này cho yum vì tôi không quen với nơi lưu trữ các tập tin của nó.


0

Con rối đọc cấu hình từ trên xuống dưới, vì vậy nếu bạn bao gồm một lớp với repo yum đầu tiên trong lớp đó, thì repo này sẽ được thêm vào trước bất cứ điều gì khác.

Nếu bạn sử dụng các cài đặt yêu cầu trên một gói, bạn sẽ đảm bảo rằng loại tài nguyên được yêu cầu có mặt trước khi thêm gói, như sau:

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

Mã này ở trên sẽ thêm repo trước khi thêm gói.


10
Con rối sử dụng ngôn ngữ khai báo, vì vậy nó không lo lắng về thứ tự của các thứ trong tệp. Đoạn đầu của bạn sai tôi sợ. Cách chính xác để làm điều này là sử dụng requiretừ khóa, mà bạn đã làm trong phần thứ hai.
Hamish Downer

0

Một cái gì đó như thế này làm việc cho tôi:

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

Tôi đã bao gồm một cái gì đó như thế này trên mysite.pp. Theo cách này, các mô-đun con rối của bạn, không có tài liệu tham khảo cho yum repos.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.