#chef-infra #chef-recipe
#шеф-инфра #шеф-повар-рецепт
Вопрос:
Я могу создать пользовательское правило брандмауэра Windows с помощью Chef и Powershell. У меня проблема с not_if.
Я использовал методы раздела реестра отсюда: http://docs.opscode.com/resource_registry_key.html
Пользовательское правило брандмауэра создает раздел реестра со случайным идентификатором GUID. Я не могу использовать методы, потому что не знаю имени ключа. Значение ключа будет одинаковым на каждом узле, но не имя ключа.
Работает следующее. Но пользовательский ключ имеет идентификатор GUID для имени ключа
execute "enableMSDTCFirewall" do
command "netsh advfirewall firewall set rule group="Distributed Transaction Coordinator" new enable=yes"
action :run
not_if { registry_data_exists?("HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules", {:name => 'MSDTC-In-TCP', :type => :string, :data => "v2.20|Action=Allow|Active=TRUE|Dir=In|Protocol=6|App=%SystemRoot%\system32\msdtc.exe|Name=@FirewallAPI.dll,-33503|Desc=@FirewallAPI.dll,-33506|EmbedCtxt=@FirewallAPI.dll,-33502|"})}
end
Кроме флага, я не могу найти другой способ проверить, существует ли правило, и не запускать скрипт во время каждого запуска клиента. Есть идеи?
В итоге это сработало
execute "enableFirewallRuleNameOutbound" do
command "powershell.exe New-NetFirewallRule -DisplayName "RuleName" -Direction Outbound -LocalPort 20000 -Protocol TCP -Action Allow"
action :run
not_if 'netsh advfirewall firewall show rule name="RuleName" > nul'
завершение
Ответ №1:
Я предполагаю, что у правила есть имя, которое вы не используете и / или могли бы использовать, чтобы помочь. Должно работать что-то вроде следующего.
При добавлении правила присвойте ему имя:
netsh advfirewall firewall add rule name=enableMSDTCFirewall ...
Проверка правила в вашем not_if:
not_if 'netsh advfirewall firewall show rule name=enableMSDTCFirewall > nul'
show
Команда должна возвращать ERRORLEVEL
значение 0, если правило уже существует.
Комментарии:
1. Вокруг строки «netsh …» должны быть одинарные кавычки, а не фигурные скобки.