Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / spec / acceptance / all_rules_spec.rb @ baad986e

Historique | Voir | Annoter | Télécharger (5,33 ko)

1
# frozen_string_literal: true
2

    
3
require 'spec_helper_acceptance'
4

    
5
describe 'nftables class' do
6
  context 'configure all nftables rules' do
7
    it 'works idempotently with no errors' do
8
      pp = <<-EOS
9
      # default mask of firewalld service fails if service is not installed.
10
      # https://tickets.puppetlabs.com/browse/PUP-10814
11
      # Disable all default rules and include below explicitly
12
      class { 'nftables':
13
        firewalld_enable => false,
14
        out_ntp          => false,
15
        out_http         => false,
16
        out_https        => false,
17
        out_icmp         => false,
18
        in_ssh           => false,
19
        in_icmp          => false,
20
      }
21
      include nftables::rules::icmp
22
      include nftables::rules::dns
23
      include nftables::rules::node_exporter
24
      include nftables::rules::nfs3
25
      include nftables::rules::ssh
26
      include nftables::rules::dhcpv6_client
27
      include nftables::rules::afs3_callback
28
      include nftables::rules::ospf
29
      include nftables::rules::http
30
      include nftables::rules::puppet
31
      include nftables::rules::pxp_agent
32
      include nftables::rules::icinga2
33
      include nftables::rules::ldap
34
      include nftables::rules::tor
35
      include nftables::rules::ospf3
36
      include nftables::rules::ceph_mon
37
      include nftables::rules::smtp_submission
38
      include nftables::rules::https
39
      include nftables::rules::nfs
40
      include nftables::rules::smtps
41
      include nftables::rules::smtp
42
      include nftables::rules::ceph
43
      include nftables::rules::samba
44
      include nftables::rules::activemq
45
      include nftables::rules::docker_ce
46
      include nftables::rules::qemu
47
      include nftables::rules::out::postgres
48
      include nftables::rules::out::icmp
49
      include nftables::rules::out::dns
50
      include nftables::rules::out::nfs3
51
      include nftables::rules::out::ssh
52
      include nftables::rules::out::kerberos
53
      include nftables::rules::out::dhcpv6_client
54
      include nftables::rules::out::ospf
55
      include nftables::rules::out::openafs_client
56
      include nftables::rules::out::http
57
      include nftables::rules::out::ssh::remove
58
      include nftables::rules::out::hkp
59
      class{'nftables::rules::out::puppet':
60
        puppetserver => '127.0.0.1',
61
      }
62
      class{'nftables::rules::out::pxp_agent':
63
        broker => '127.0.0.1',
64
      }
65
      class{'nftables::rules::out::ldap':
66
        ldapserver => '127.0.0.1',
67
      }
68
      class{'nftables::rules::out::active_directory':
69
        adserver => '127.0.0.1',
70
      }
71
      include nftables::rules::out::all
72
      include nftables::rules::out::tor
73
      include nftables::rules::out::ospf3
74
      include nftables::rules::out::mysql
75
      include nftables::rules::out::ceph_client
76
      include nftables::rules::out::https
77
      include nftables::rules::out::dhcp
78
      include nftables::rules::out::nfs
79
      include nftables::rules::out::smtp
80
      include nftables::rules::out::smtp_client
81
      include nftables::rules::out::imap
82
      include nftables::rules::out::pop3
83
      include nftables::rules::out::chrony
84
      include nftables::rules::out::wireguard
85
      include nftables::rules::out::whois
86
      include nftables::rules::wireguard
87
      include nftables::rules::multicast
88
      include nftables::rules::spotify
89
      include nftables::rules::llmnr
90
      include nftables::rules::ssdp
91
      include nftables::rules::mdns
92
      include nftables::rules::igmp
93
      include nftables::rules::wsd
94
      include nftables::rules::ftp
95
      include nftables::rules::out::igmp
96
      include nftables::rules::out::mldv2
97
      include nftables::rules::out::mdns
98
      include nftables::rules::out::ssdp
99
      include nftables::services::dhcpv6_client
100
      include nftables::services::openafs_client
101
      nftables::set{'my_test_set':
102
        type       => 'ipv4_addr',
103
        elements   => ['192.168.0.1', '10.0.0.2'],
104
        table      => ['inet-filter', 'ip-nat'],
105
      }
106
      $config_path = $facts['os']['family'] ? {
107
        'Archlinux' => '/etc/nftables.conf',
108
        'Debian' => '/etc/nftables.conf',
109
        default => '/etc/sysconfig/nftables.conf',
110
      }
111
      $nft_path = $facts['os']['family'] ? {
112
        'Archlinux' => '/usr/bin/nft',
113
        default => '/usr/sbin/nft',
114
      }
115
      # nftables cannot be started in docker so replace service with a validation only.
116
      systemd::dropin_file{"zzz_docker_nft.conf":
117
        ensure  => present,
118
        unit    => "nftables.service",
119
        content => [
120
          "[Service]",
121
          "ExecStart=",
122
          "ExecStart=${nft_path} -c -I /etc/nftables/puppet -f ${config_path}",
123
          "ExecReload=",
124
          "ExecReload=${nft_path} -c -I /etc/nftables/puppet -f ${config_path}",
125
          "",
126
          ].join("\n"),
127
        notify  => Service["nftables"],
128
      }
129
      EOS
130
      # Run it twice and test for idempotency
131
      apply_manifest(pp, catch_failures: true)
132
      apply_manifest(pp, catch_changes: true)
133
    end
134

    
135
    describe package('nftables') do
136
      it { is_expected.to be_installed }
137
    end
138

    
139
    describe service('nftables') do
140
      it { is_expected.to be_running }
141
      it { is_expected.to be_enabled }
142
    end
143

    
144
    describe file('/etc/nftables/puppet.nft', '/etc/systemd/system/nftables.service.d/puppet_nft.conf') do
145
      it { is_expected.to be_file }
146
    end
147

    
148
    describe file('/etc/nftables/puppet') do
149
      it { is_expected.to be_directory }
150
    end
151
  end
152
end