Skip to content

Commit 6cc5006

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

File tree

7 files changed

+81
-81
lines changed

7 files changed

+81
-81
lines changed
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/cloud.pp

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,13 @@
44

55
class { '::cpufrequtils': }
66

7-
$firewall_rules_str = join(
8-
query_facts('Class[Role::Cloud]', ['networking'])
9-
.map |$key, $value| {
10-
if ( $value['networking']['interfaces']['vmbr1'] ) {
11-
"${value['networking']['interfaces']['vmbr1']['ip']} ${value['networking']['ip']} ${value['networking']['ip6']}"
12-
} else {
13-
"${value['networking']['ip']} ${value['networking']['ip6']}"
14-
}
15-
}
16-
.flatten()
17-
.unique()
18-
.sort(),
19-
' '
20-
)
7+
$pql = @(PQL)
8+
facts[certname, value] {
9+
name = 'networking' and
10+
resources { type = 'Class' and title = 'Role::Cloud' }
11+
}
12+
| PQL
13+
$firewall_rules_str = vmlib::generate_firewall_ip($pql)
2114

2215
ferm::service { 'proxmox port 5900:5999':
2316
proto => 'tcp',

modules/role/manifests/irc.pp

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -32,44 +32,21 @@
3232
udp_port => '5071',
3333
}
3434

35-
$firewall_irc_rules_str = join(
36-
query_facts('Class[Role::Mediawiki] or Class[Role::Mediawiki_task] or Class[Role::Mediawiki_beta]', ['networking'])
37-
.map |$key, $value| {
38-
if ( $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-
)
35+
$subquery = @("PQL")
36+
(resources { type = 'Class' and title = 'Role::Mediawik' } or
37+
resources { type = 'Class' and title = 'Role::Mediawiki_task' } or
38+
resources { type = 'Class' and title = 'Role::Mediawiki_beta' })
39+
| PQL
40+
$firewall_irc_rules_str = vmlib::generate_firewall_ip($subquery)
41+
5142
ferm::service { 'ircrcbot':
5243
proto => 'udp',
5344
port => '5070',
5445
srange => "(${firewall_irc_rules_str})",
5546
}
5647

57-
$firewall_all_rules_str = join(
58-
query_facts('Class[Base]', ['networking'])
59-
.map |$key, $value| {
60-
if ( $value['networking']['interfaces']['ens19'] and $value['networking']['interfaces']['ens18'] ) {
61-
"${value['networking']['interfaces']['ens19']['ip']} ${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
62-
} elsif ( $value['networking']['interfaces']['ens18'] ) {
63-
"${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
64-
} else {
65-
"${value['networking']['ip']} ${value['networking']['ip6']}"
66-
}
67-
}
68-
.flatten()
69-
.unique()
70-
.sort(),
71-
' '
72-
)
48+
$firewall_all_rules_str = vmlib::generate_firewall_ip()
49+
7350
ferm::service { 'irclogserverbot':
7451
proto => 'udp',
7552
port => '5071',

modules/role/manifests/redis.pp

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,20 @@
99
maxmemory => $redis_heap,
1010
}
1111

12-
$firewall = $facts['networking']['hostname'] =~ /^test1.+$/ ? {
13-
true => 'Class[Role::Mediawiki_beta] or Class[Role::Icinga2]',
14-
default => 'Class[Role::Mediawiki] or Class[Role::Mediawiki_task] or Class[Role::Icinga2]',
12+
if ( $facts['networking']['hostname'] =~ /^test1.+$/ ) {
13+
$subquery = @("PQL")
14+
(resources { type = 'Class' and title = 'Role::Mediawiki_beta' } or
15+
resources { type = 'Class' and title = 'Role::Icinga2' })
16+
| PQL
17+
} else {
18+
$subquery = @("PQL")
19+
(resources { type = 'Class' and title = 'Role::Mediawik' } or
20+
resources { type = 'Class' and title = 'Role::Mediawiki_task' } or
21+
resources { type = 'Class' and title = 'Role::Icinga2' })
22+
| PQL
1523
}
24+
$firewall_rules_str = vmlib::generate_firewall_ip($subquery)
1625

17-
$firewall_rules_str = join(
18-
query_facts($firewall, ['networking'])
19-
.map |$key, $value| {
20-
if ( $value['networking']['interfaces']['ens19'] and $value['networking']['interfaces']['ens18'] ) {
21-
"${value['networking']['interfaces']['ens19']['ip']} ${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
22-
} elsif ( $value['networking']['interfaces']['ens18'] ) {
23-
"${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
24-
} else {
25-
"${value['networking']['ip']} ${value['networking']['ip6']}"
26-
}
27-
}
28-
.flatten()
29-
.unique()
30-
.sort(),
31-
' '
32-
)
3326
ferm::service { 'redis':
3427
proto => 'tcp',
3528
port => '6379',

modules/role/manifests/ssl.pp

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,11 @@
22
class role::ssl {
33
include ::ssl
44

5-
$firewall_srange = join(
6-
query_facts('Class[Role::Varnish] or Class[Role::Icinga2]', ['networking'])
7-
.map |$key, $value| {
8-
if ( $value['networking']['interfaces']['ens19'] and $value['networking']['interfaces']['ens18'] ) {
9-
"${value['networking']['interfaces']['ens19']['ip']} ${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
10-
} elsif ( $value['networking']['interfaces']['ens18'] ) {
11-
"${value['networking']['interfaces']['ens18']['ip']} ${value['networking']['interfaces']['ens18']['ip6']}"
12-
} else {
13-
"${value['networking']['ip']} ${value['networking']['ip6']}"
14-
}
15-
}
16-
.flatten()
17-
.unique()
18-
.sort(),
19-
' '
20-
)
5+
$subquery = @("PQL")
6+
(resources { type = 'Class' and title = 'Role::Varnish' } or
7+
resources { type = 'Class' and title = 'Role::Icinga2' })
8+
| PQL
9+
$firewall_rules_str = vmlib::generate_firewall_ip($subquery)
2110

2211
if !defined(Ferm::Service['http']) {
2312
ferm::service { 'http':
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
function vmlib::generate_firewall_ip (
2+
Optional[String[1]] $subquery = undef
3+
) >> String {
4+
join(
5+
puppetdb::query_facts(['networking'], $subquery).values.map |$_facts| {
6+
if ( $_facts['networking']['interfaces']['vmbr1'] ) {
7+
"${value['value']['interfaces']['vmbr1']['ip']} ${value['value']['ip']} ${value['value']['ip6']}"
8+
} elsif ( $_facts['networking']['interfaces']['ens19'] and $_facts['networking']['interfaces']['ens18'] ) {
9+
"${value['value']['interfaces']['ens19']['ip']} ${value['value']['interfaces']['ens18']['ip']} ${value['value']['interfaces']['ens18']['ip6']}"
10+
} elsif ( $value['value']['interfaces']['ens18'] ) {
11+
"${value['value']['interfaces']['ens18']['ip']} ${value['value']['interfaces']['ens18']['ip6']}"
12+
} else {
13+
"${value['value']['ip']} ${value['value']['ip6']}"
14+
}
15+
}.flatten.sort.unique,
16+
' '
17+
)
18+
}

0 commit comments

Comments
 (0)