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.
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.
Câu trả lời:
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, base
bạn có thể nói
class foo {
package { "bar": ensure => installed, require => Yumrepo["IUS"] }
}
Điều này sẽ đảm bảo rằng
bar
sẽ không được cài đặt trừ khi kho lưu trữ IUS được xác địnhMặ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.
(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
}
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 firstrun
hoặ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ẻ.
Đ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ó.
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.
require
từ khóa, mà bạn đã làm trong phần thứ hai.
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.