our
$VERSION
=
'1.16.0'
;
my
$__provider
= {
default
=>
"Rex::Resource::firewall::Provider::iptables"
, };
resource
"firewall"
, {
export
=> 1 },
sub
{
my
$rule_name
= resource_name;
my
$rule_config
= {
action
=> param_lookup(
"action"
),
ensure
=> param_lookup(
"ensure"
,
"present"
),
proto
=> param_lookup(
"proto"
,
undef
),
source
=> param_lookup(
"source"
,
undef
),
destination
=> param_lookup(
"destination"
,
undef
),
port
=> param_lookup(
"port"
,
undef
),
app
=> param_lookup(
"app"
,
undef
),
sport
=> param_lookup(
"sport"
,
undef
),
sapp
=> param_lookup(
"sapp"
,
undef
),
dport
=> param_lookup(
"dport"
,
undef
),
dapp
=> param_lookup(
"dapp"
,
undef
),
tcp_flags
=> param_lookup(
"tcp_falgs"
,
undef
),
chain
=> param_lookup(
"chain"
,
"input"
),
table
=> param_lookup(
"table"
,
"filter"
),
iniface
=> param_lookup(
"iniface"
,
undef
),
outiface
=> param_lookup(
"outiface"
,
undef
),
reject_with
=> param_lookup(
"reject_with"
,
undef
),
logging
=> param_lookup(
"logging"
,
undef
),
log
=> param_lookup(
"log"
,
undef
),
log_level
=> param_lookup(
"log_level"
,
undef
),
log_prefix
=> param_lookup(
"log_prefix"
,
undef
),
state
=> param_lookup(
"state"
,
undef
),
ip_version
=> param_lookup(
"ip_version"
, -4 ),
};
my
$provider
=
param_lookup(
"provider"
, case (
lc
(operating_system),
$__provider
) );
if
(
$provider
!~ m/::/ ) {
$provider
=
"Rex::Resource::firewall::Provider::$provider"
;
}
$provider
->
require
;
my
$provider_o
=
$provider
->new();
my
$changed
= 0;
if
(
my
$logging
=
$rule_config
->{logging} ) {
if
(
$provider_o
->logging(
$logging
) ) {
emit changed,
"Firewall logging updated."
;
}
}
elsif
(
$rule_config
->{ensure} eq
"present"
) {
if
(
$provider_o
->present(
$rule_config
) ) {
emit created,
"Firewall rule created."
;
}
}
elsif
(
$rule_config
->{ensure} eq
"absent"
) {
if
(
$provider_o
->absent(
$rule_config
) ) {
emit removed,
"Firewall rule removed."
;
}
}
elsif
(
$rule_config
->{ensure} eq
"disabled"
) {
if
(
$provider_o
->disable(
$rule_config
) ) {
emit changed,
"Firewall disabled."
;
}
}
elsif
(
$rule_config
->{ensure} eq
"enabled"
) {
if
(
$provider_o
->enable(
$rule_config
) ) {
emit changed,
"Firewall enabled."
;
}
}
else
{
die
"Error: $rule_config->{ensure} not a valid option for 'ensure'."
;
}
};
1;