Я должен инстанцировать связанного с брандмауэром класса, который берет массив хостов, позволенных получить доступ к порту базы данных на сервере дб. То, что находится в том списке, зависит, на каком из различных веб-приложений включены, на который хосты.
Я хотел бы поместить что-то среди логики для приложения, в котором говорится, 'удостоверяются, что IP этого сервера находится в списке того, которые могут получить доступ к дб', но не имея возможности повторно объявить переменные, я не уверен, как накопить ту информацию.
Это - вид подобных, что делает concat, хотя это в лучшем случае получило бы меня файл, я мог @include в правилах брандмауэра. Я мог переписать модуль брандмауэра, таким образом, я могу сделать это тот путь, но это довольно грязно, и я надеюсь избежать этого.
Определение виртуальных ресурсов в логике приложения и затем сбор их походят на более хороший способ пойти, но я не уверен хотя, как я добрался бы от коллектора, инстанцирующего набора ресурсов данного типа к наличию массива некоторого значения от каждого из тех ресурсов?
WebApp::FirewallHole <| dbhost == $fqdn |>
$app_hosts = ???
Firewall::Hole {'mysql':
proto => 'tcp',
dport => '3306',
saddr=> $app_hosts,
}
В этом коде, WebApp::FirewallHole
existst просто для того, чтобы втянуть эту информацию, и может быть определен всегда, который помогает. Firewall::Hole
имеет в текущих целях фиксированный интерфейс.
Вышеупомянутое заминает некоторые детали логики брандмауэра. Я не могу только инстанцировать Брандмауэра:: класс Дыры неоднократно здесь и изменение интерфейса, чтобы признать, что просто продвинул бы проблему далее вниз в логику брандмауэра, таким образом, вопрос о том, как я могу создать массив значений от ряда собранных ресурсов.
Предполагая, что вы настроили PuppetDB для своего кластера, вы можете легко использовать Puppetdbquery
puppet module install dalen-puppetdbquery
, а затем в коде Puppet вы можете запрашивать различную информацию, например основываясь на фактах, в этом случае все серверы Linux:
$ary = query_nodes('(kernel="Linux")')
результатом будет массив FQDN:
['foo.example.org', 'bar.example.org']
В приведенном выше примере ядро
- это просто факт Puppet. См. facter -y -p
для получения информации о вашем узле. Вы можете использовать, например:
query_nodes('(processors.count=12 and os.architecture=amd64)')
Запрос мог бы быть намного более сложным, учитывая ваш пример, и использование CLI должно сработать примерно так:
puppet query nodes '(Firewall::Hole['mysql'])'
PuppetDB может выглядеть довольно сложным, но при попытке просмотра RAL приведет к гораздо более сложному (и более медленному) решению.