Добавление ням репо в куклу, прежде чем делать что-либо еще
26
Есть ли способ заставить куклу сначала делать определенные вещи? Например, мне нужно установить RPM на всех серверах, чтобы добавить репозиторий yum (сообщество IUS) перед установкой любого из пакетов.
Ах хорошо. Это довольно круто. Я не видел там yumrepo - спасибо!
Джон Хаддад
Он работает только с дистрибутивами, использующими Yum, поэтому только Rhel5, а не Rhel4
Дейв Чейни
2
Что произойдет, если я не знаю, в каком репозитории есть пакет? Например, пакет может быть доступен в хранилище fedora на Fedora и в хранилище epel на RHEL, CentOS и т. Д. Это означает, что если я использую сторонний рецепт / модуль, мне придется его настраивать.
Кристиан Чиупиту
17
Хотя этапы могут справиться с этим, как и конкретные зависимости репозитория yum, лучше объявить отношения в общем виде.
Это делает так, что все типы yumrepo будут обработаны перед любыми пакетами, у которых нет 'rpm' в качестве их провайдера. Последнее исключение заключается в том, что я могу использовать (например) RPM-пакет epel-release, чтобы помочь установить репозиторий yum.
(Я нашел этот вопрос после того, как ответил почти одинаково .. поэтому я подумал, что мой ответ применим и здесь, и стоит повторить его (безопаснее иметь ответ в двух местах ...)
Насколько я понимаю, это именно то , для чего нужны этапы - они позволяют группировать и упорядочивать выполнение классов. Я использую «этапы» для обновления и настройки APT на серверах Debian, что должно быть очень похоже на то, что вы собираетесь делать с YUM.
Прежде всего, вы объявляете этап «yum» на верхнем уровне (выше «узлов»), чтобы классы на этапе «yum» выполнялись раньше, чем «основные»:
stage { 'yum' : before => Stage['main'] }
Затем вы назначаете сцену классам. Вы можете сделать это прямо в определении вашего узла:
node default {
class { 'yumrepos' : stage => yum }
include packages
}
Главное, что вам нужно использовать, это ключевое слово require - «Оценить один или несколько классов, добавив требуемый класс в качестве зависимости».
Примером использования репозитория apt может быть:
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];
}
}
Таким образом, вы можете видеть, как каждый этап требует, чтобы предыдущий был сделан первым. Я оставлю вас, чтобы разобраться, как применить это к yum, так как я не знаю, где он хранит свои файлы.
Puppet читает конфигурацию сверху вниз, поэтому, если вы сначала включите класс с репозиторием yum в этот класс, этот репозиторий будет добавлен раньше всего.
Если вы используете обязательные параметры для пакета, вы убедитесь, что требуемый тип ресурса присутствует перед добавлением пакета, как таковой:
Puppet использует декларативный язык, поэтому он не беспокоится о порядке вещей в файле. Боюсь, ваш первый абзац неверен. Правильный способ сделать это - использовать requireключевое слово, которое вы сделали во второй части.
Ответы:
Если вы хотите убедиться, что репозиторий установлен на всех ваших серверах, я бы предложил что-то вроде этого
Тогда для любого расширяющегося узла
base
вы можете сказатьЭто обеспечит
bar
не будет установлен, пока не определен репозиторий IUSисточник
Хотя этапы могут справиться с этим, как и конкретные зависимости репозитория yum, лучше объявить отношения в общем виде.
Просто вставьте
Yumrepo <| |> -> Package <| provider != 'rpm' |>
свой манифест марионетки.Это делает так, что все типы yumrepo будут обработаны перед любыми пакетами, у которых нет 'rpm' в качестве их провайдера. Последнее исключение заключается в том, что я могу использовать (например) RPM-пакет epel-release, чтобы помочь установить репозиторий yum.
источник
(Я нашел этот вопрос после того, как ответил почти одинаково .. поэтому я подумал, что мой ответ применим и здесь, и стоит повторить его (безопаснее иметь ответ в двух местах ...)
Насколько я понимаю, это именно то , для чего нужны этапы - они позволяют группировать и упорядочивать выполнение классов. Я использую «этапы» для обновления и настройки APT на серверах Debian, что должно быть очень похоже на то, что вы собираетесь делать с YUM.
Прежде всего, вы объявляете этап «yum» на верхнем уровне (выше «узлов»), чтобы классы на этапе «yum» выполнялись раньше, чем «основные»:
Затем вы назначаете сцену классам. Вы можете сделать это прямо в определении вашего узла:
источник
Вы можете использовать теги . Это позволит вам пометить установщик репо с
firstrun
чем-то,тогда беги
и он будет выполнять только модули / операторы, соответствующие тегу.
источник
Главное, что вам нужно использовать, это ключевое слово require - «Оценить один или несколько классов, добавив требуемый класс в качестве зависимости».
Примером использования репозитория apt может быть:
(Адаптировано из этого примера начальной загрузки марионеток ).
Таким образом, вы можете видеть, как каждый этап требует, чтобы предыдущий был сделан первым. Я оставлю вас, чтобы разобраться, как применить это к yum, так как я не знаю, где он хранит свои файлы.
источник
Puppet читает конфигурацию сверху вниз, поэтому, если вы сначала включите класс с репозиторием yum в этот класс, этот репозиторий будет добавлен раньше всего.
Если вы используете обязательные параметры для пакета, вы убедитесь, что требуемый тип ресурса присутствует перед добавлением пакета, как таковой:
Этот код выше добавит репо перед добавлением пакета.
источник
require
ключевое слово, которое вы сделали во второй части.Как-то так у меня сработало
Я включил что-то подобное на mysite.pp. Таким образом, ваши кукольные модули не содержат ссылок на репозитории yum.
источник