Я могу накопить массив значений в марионетке от коллектора

Я должен инстанцировать связанного с брандмауэром класса, который берет массив хостов, позволенных получить доступ к порту базы данных на сервере дб. То, что находится в том списке, зависит, на каком из различных веб-приложений включены, на который хосты.

Я хотел бы поместить что-то среди логики для приложения, в котором говорится, 'удостоверяются, что IP этого сервера находится в списке того, которые могут получить доступ к дб', но не имея возможности повторно объявить переменные, я не уверен, как накопить ту информацию.

Это - вид подобных, что делает concat, хотя это в лучшем случае получило бы меня файл, я мог @include в правилах брандмауэра. Я мог переписать модуль брандмауэра, таким образом, я могу сделать это тот путь, но это довольно грязно, и я надеюсь избежать этого.

Определение виртуальных ресурсов в логике приложения и затем сбор их походят на более хороший способ пойти, но я не уверен хотя, как я добрался бы от коллектора, инстанцирующего набора ресурсов данного типа к наличию массива некоторого значения от каждого из тех ресурсов?

WebApp::FirewallHole <| dbhost == $fqdn |>

$app_hosts = ???

Firewall::Hole {'mysql':
  proto => 'tcp',
  dport => '3306',
  saddr=> $app_hosts,
}

В этом коде, WebApp::FirewallHole existst просто для того, чтобы втянуть эту информацию, и может быть определен всегда, который помогает. Firewall::Hole имеет в текущих целях фиксированный интерфейс.

Вышеупомянутое заминает некоторые детали логики брандмауэра. Я не могу только инстанцировать Брандмауэра:: класс Дыры неоднократно здесь и изменение интерфейса, чтобы признать, что просто продвинул бы проблему далее вниз в логику брандмауэра, таким образом, вопрос о том, как я могу создать массив значений от ряда собранных ресурсов.

1
задан 21 July 2015 в 09:02
1 ответ

Предполагая, что вы настроили 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 приведет к гораздо более сложному (и более медленному) решению.

0
ответ дан 4 December 2019 в 07:23

Теги

Похожие вопросы