Skip to content

Commit f97deee

Browse files
committed
Migrate from puppetdbquery to puppetdb::query_facts
Bug: T13025
1 parent 02e83c4 commit f97deee

File tree

23 files changed

+193
-349
lines changed

23 files changed

+193
-349
lines changed

modules/base/manifests/firewall.pp

Lines changed: 10 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -30,48 +30,22 @@
3030
source => 'puppet:///modules/base/firewall/main-input-default-drop.conf',
3131
}
3232

33-
$firewall_rules_str = join(
34-
query_facts('Class[Role::Icinga2]', ['networking'])
35-
.map |$key, $value| {
36-
if ( $value['networking']['interfaces']['he-ipv6'] ) {
37-
"${value['networking']['ip']} ${value['networking']['interfaces']['he-ipv6']['ip6']}"
38-
} elsif ( $value['networking']['interfaces']['ens19'] and $value['networking']['interfaces']['ens18'] ) {
39-
"${value['networking']['interfaces']['ens19']['ip']} ${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
40-
} elsif ( $value['networking']['interfaces']['ens18'] ) {
41-
"${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
42-
} else {
43-
"${value['networking']['ip']} ${value['networking']['ip6']}"
44-
}
45-
}
46-
.flatten()
47-
.unique()
48-
.sort(),
49-
' '
50-
)
33+
$subquery = @("PQL")
34+
resources { type = 'Class' and title = 'Role::Icinga2' }
35+
| PQL
36+
$firewall_rules_str = vmlib::generate_firewall_ip($subquery)
37+
5138
ferm::service { 'nrpe':
5239
proto => 'tcp',
5340
port => '5666',
5441
srange => "(${firewall_rules_str})",
5542
}
5643

57-
$firewall_bastion_hosts = join(
58-
query_facts('Class[Base]', ['networking'])
59-
.map |$key, $value| {
60-
if ( $value['networking']['interfaces']['he-ipv6'] ) {
61-
"${value['networking']['ip']} ${value['networking']['interfaces']['he-ipv6']['ip6']}"
62-
} elsif ( $value['networking']['interfaces']['ens19'] and $value['networking']['interfaces']['ens18'] ) {
63-
"${value['networking']['interfaces']['ens19']['ip']} ${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
64-
} elsif ( $value['networking']['interfaces']['ens18'] ) {
65-
"${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
66-
} else {
67-
"${value['networking']['ip']} ${value['networking']['ip6']}"
68-
}
69-
}
70-
.flatten()
71-
.unique()
72-
.sort(),
73-
' '
74-
)
44+
$subquery = @("PQL")
45+
resources { type = 'Class' and title = 'Base' }
46+
| PQL
47+
$firewall_bastion_hosts = vmlib::generate_firewall_ip($subquery)
48+
7549
ferm::service { 'ssh':
7650
proto => 'tcp',
7751
port => '22',

modules/prometheus/manifests/class.pp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,15 @@
33
String $module,
44
Integer $port,
55
) {
6-
$servers = query_nodes("Class[${module}] or Define[${module}]")
7-
.flatten()
8-
.unique()
9-
.sort()
6+
7+
$pql = @("PQL")
8+
nodes[certname] {
9+
(resources {type = "Class" and title = "${module}" }
10+
or resources {type = "Define" and title = "${module}" })
11+
order by certname
12+
}
13+
| PQL
14+
$servers = puppetdb_query($pql).map |$resource| { $resource['certname'] }.flatten().unique().sort
1015

1116
file { $dest:
1217
ensure => present,

modules/prometheus/manifests/exporter/cadvisor.pp

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,10 @@
88
subscribe => Package['cadvisor'],
99
}
1010

11-
$firewall_rules_str = join(
12-
query_facts('Class[Prometheus] or Class[Role::Grafana]', ['networking'])
13-
.map |$key, $value| {
14-
if ( $value['networking']['interfaces']['ens19'] and $value['networking']['interfaces']['ens18'] ) {
15-
"${value['networking']['interfaces']['ens19']['ip']} ${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
16-
} elsif ( $value['networking']['interfaces']['ens18'] ) {
17-
"${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
18-
} else {
19-
"${value['networking']['ip']} ${value['networking']['ip6']}"
20-
}
21-
}
22-
.flatten()
23-
.unique()
24-
.sort(),
25-
' '
26-
)
11+
$subquery = @("PQL")
12+
resources { type = 'Class' and title = 'Prometheus' }
13+
| PQL
14+
$firewall_rules_str = vmlib::generate_firewall_ip($subquery)
2715
ferm::service { 'prometheus cadvisor_exporter':
2816
proto => 'tcp',
2917
port => '4194',

modules/prometheus/manifests/exporter/mariadb.pp

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,22 +64,10 @@
6464
ensure => running,
6565
}
6666

67-
$firewall_rules_str = join(
68-
query_facts('Class[Prometheus]', ['networking'])
69-
.map |$key, $value| {
70-
if ( $value['networking']['interfaces']['ens19'] and $value['networking']['interfaces']['ens18'] ) {
71-
"${value['networking']['interfaces']['ens19']['ip']} ${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
72-
} elsif ( $value['networking']['interfaces']['ens18'] ) {
73-
"${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
74-
} else {
75-
"${value['networking']['ip']} ${value['networking']['ip6']}"
76-
}
77-
}
78-
.flatten()
79-
.unique()
80-
.sort(),
81-
' '
82-
)
67+
$subquery = @("PQL")
68+
resources { type = 'Class' and title = 'Prometheus' }
69+
| PQL
70+
$firewall_rules_str = vmlib::generate_firewall_ip($subquery)
8371
ferm::service { 'prometheus mysqld_exporter':
8472
proto => 'tcp',
8573
port => '9104',

modules/prometheus/manifests/exporter/openldap.pp

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,10 @@
2828
}
2929
}
3030

31-
$firewall_rules_str = join(
32-
query_facts('Class[Role::Prometheus]', ['networking'])
33-
.map |$key, $value| {
34-
if ( $value['networking']['interfaces']['ens19'] and $value['networking']['interfaces']['ens18'] ) {
35-
"${value['networking']['interfaces']['ens19']['ip']} ${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
36-
} elsif ( $value['networking']['interfaces']['ens18'] ) {
37-
"${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
38-
} else {
39-
"${value['networking']['ip']} ${value['networking']['ip6']}"
40-
}
41-
}
42-
.flatten()
43-
.unique()
44-
.sort(),
45-
' '
46-
)
31+
$subquery = @("PQL")
32+
resources { type = 'Class' and title = 'Role::Prometheus' }
33+
| PQL
34+
$firewall_rules_str = vmlib::generate_firewall_ip($subquery)
4735
ferm::service { 'prometheus openldap_exporter':
4836
proto => 'tcp',
4937
port => '9142',

modules/prometheus/manifests/exporter/varnish.pp

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,11 @@
99
restart => true,
1010
}
1111

12-
$firewall_rules_str = join(
13-
query_facts('Class[Role::Prometheus]', ['networking'])
14-
.map |$key, $value| {
15-
if ( $value['networking']['interfaces']['he-ipv6'] ) {
16-
"${value['networking']['ip']} ${value['networking']['interfaces']['he-ipv6']['ip6']}"
17-
} elsif ( $value['networking']['interfaces']['ens19'] and $value['networking']['interfaces']['ens18'] ) {
18-
"${value['networking']['interfaces']['ens19']['ip']} ${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
19-
} elsif ( $value['networking']['interfaces']['ens18'] ) {
20-
"${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
21-
} else {
22-
"${value['networking']['ip']} ${value['networking']['ip6']}"
23-
}
24-
}
25-
.flatten()
26-
.unique()
27-
.sort(),
28-
' '
29-
)
12+
$subquery = @("PQL")
13+
resources { type = 'Class' and title = 'Role::Prometheus' }
14+
| PQL
15+
$firewall_rules_str = vmlib::generate_firewall_ip($subquery)
16+
3017
ferm::service { 'prometheus varnish_exporter':
3118
proto => 'tcp',
3219
port => $listen_port,

modules/prometheus/manifests/init.pp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,13 @@
5656
refreshonly => true,
5757
}
5858

59-
$servers = query_nodes('Class[Base]')
60-
.flatten()
61-
.unique()
62-
.sort()
59+
$pql = @("PQL")
60+
nodes[certname] {
61+
resources {type = "Class" and title = "Base" }
62+
order by certname
63+
}
64+
| PQL
65+
$servers = puppetdb_query($pql).map |$resource| { $resource['certname'] }.flatten().unique().sort
6366

6467
file { '/etc/prometheus/targets/nodes.yaml':
6568
ensure => present,
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
# @summery query for custome facts for a host and return a hash of facts values keyed to the certname
3+
# @param filter a hash of fact name to fetch
4+
# @param a pql subquery to apply to the query
5+
function puppetdb::query_facts(
6+
Array[String[1]] $filter,
7+
Optional[String[1]] $subquery = undef,
8+
) >> Hash[Stdlib::Fqdn, Hash] {
9+
$_subquery = $subquery ? {
10+
undef => '',
11+
default => " and ${subquery}"
12+
}
13+
$filter_str = $filter.map |$filter| { "\"${filter}\"" }.join(',')
14+
$pql = "facts[certname, name, value] { name in [${filter_str}] ${_subquery} }"
15+
puppetdb::munge_facts(puppetdb_query($pql))
16+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
Puppet::Functions.create_function(:'puppetdb::munge_facts') do
3+
dispatch :munge_facts do
4+
param 'Array[Hash]', :facts
5+
end
6+
7+
def munge_facts(facts)
8+
facts_out = Hash.new {|h, k| h[k] = {}}
9+
facts.each do |f|
10+
facts_out[f['certname']][f['name']] = f['value']
11+
end
12+
facts_out
13+
end
14+
end

modules/role/manifests/burrow.pp

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,24 +26,10 @@
2626
metrics_addr => '0.0.0.0:9500'
2727
}
2828

29-
$firewall_rules_str = join(
30-
query_facts('Class[Role::Prometheus]', ['networking'])
31-
.map |$key, $value| {
32-
if ( $value['networking']['interfaces']['he-ipv6'] ) {
33-
"${value['networking']['ip']} ${value['networking']['interfaces']['he-ipv6']['ip6']}"
34-
} elsif ( $value['networking']['interfaces']['ens19'] and $value['networking']['interfaces']['ens18'] ) {
35-
"${value['networking']['interfaces']['ens19']['ip']} ${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
36-
} elsif ( $value['networking']['interfaces']['ens18'] ) {
37-
"${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
38-
} else {
39-
"${value['networking']['ip']} ${value['networking']['ip6']}"
40-
}
41-
}
42-
.flatten()
43-
.unique()
44-
.sort(),
45-
' '
46-
)
29+
$subquery = @("PQL")
30+
resources { type = 'Class' and title = 'Role::Prometheus' }
31+
| PQL
32+
$firewall_rules_str = vmlib::generate_firewall_ip($subquery)
4733

4834
# Burrow offers a HTTP REST API
4935
ferm::service { 'burrow-main':

0 commit comments

Comments
 (0)