Назад | Перейти на главную страницу

puppet: порядок выполнения экземпляров классов

Я знаю, как можно использовать упорядочение ресурсов в Puppet, чтобы упорядочить встроенные типы (пользователь, группа, cron ...) или классы, но мне интересно, как я могу сделать это для конкретных экземпляров классов.

Например, я использую модуль puppetlabs / apt и определенный тип apt :: source для отправки источников wheezy / updates / ... apt. Мой код выглядит так

apt::source { 'debian_wheezy':
    location        => 'http://ftp.debian.org/debian/',
    release         => 'wheezy',
    repos           => 'main contrib non-free',
    include_src     => false,
}
apt::source { 'debian_wheezy_updates':
    location        => 'http://ftp.debian.org/debian/',
    release         => 'wheezy-updates',
    repos           => 'main contrib non-free',
    include_src     => false,
}

Я хочу использовать другой модуль для настройки HAProxy, но мне нужно определить другой apt :: source для настройки обратных портов wheezy, потому что haproxy недоступен в стандартном репозитории wheezy. Итак, я хочу указать, что мой класс haproxy зависит от моего типа apt :: source, определяющего бэкпорты wheezy.

Я пробовал что-то наивное вроде

Class['apt::source'] -> Class['haproxy']

но логически это не имеет смысла: я хочу указать один конкретный экземпляр apt :: source.

Кто-нибудь знает, как я могу это сделать?

Спасибо

Когда вы объявляете класс haproxy, вы можете потребовать его, например:

class { 'haproxy':
  require => Apt::Source['debian_wheezy'],
}

Вы можете поставить соответствующие apt::source ресурс в собственном классе. Пример:

myapt:

require myapt::default
require myapt::backports

myapt :: default:

apt::source { 'debian_wheezy':
    location        => 'http://ftp.debian.org/debian/',
    release         => 'wheezy',
    repos           => 'main contrib non-free',
    include_src     => false,
}
apt::source { 'debian_wheezy_updates':
    location        => 'http://ftp.debian.org/debian/',
    release         => 'wheezy-updates',
    repos           => 'main contrib non-free',
    include_src     => false,
}

myapt :: backports:

apt::source { 'debian_wheezy_backports':
    location        => 'http://ftp.debian.org/debian/',
    release         => 'wheezy-backports',
    repos           => 'main contrib non-free',
    include_src     => false,
}

myhaproxy:

require myapt::backports
class { 'haproxy': }