Skip to content

Commit e686db4

Browse files
committed
Allow trusted facts to be derived from node name
When using the certless API, Puppet will use trusted facts from PuppetDB unless provided in the request. If the PuppetDB facts were uploaded by the catalog_diff host, the trusted facts in PuppetDB will be for the catalog_diff host rather than the node being evaluated. This allows the trusted facts to be derived from the node name instead of using values from PuppetDB.
1 parent 260323c commit e686db4

File tree

4 files changed

+39
-9
lines changed

4 files changed

+39
-9
lines changed

lib/puppet/catalog-diff/compilecatalog.rb

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ class CompileCatalog
1212

1313
attr_reader :node_name
1414

15-
def initialize(node_name, save_directory, server, certless, catalog_from_puppetdb, puppetdb, puppetdb_tls_cert, puppetdb_tls_key, puppetdb_tls_ca, puppetserver_tls_cert, puppetserver_tls_key, puppetserver_tls_ca)
15+
def initialize(node_name, save_directory, server, certless, catalog_from_puppetdb, puppetdb, puppetdb_tls_cert, puppetdb_tls_key, puppetdb_tls_ca, puppetserver_tls_cert, puppetserver_tls_key, puppetserver_tls_ca, derive_trusted_facts)
1616
@node_name = node_name
1717
catalog = if catalog_from_puppetdb
1818
get_catalog_from_puppetdb(node_name, server, puppetdb, puppetdb_tls_cert, puppetdb_tls_key, puppetdb_tls_ca)
1919
else
20-
catalog = compile_catalog(node_name, server, certless, puppetserver_tls_cert, puppetserver_tls_key, puppetserver_tls_ca)
20+
catalog = compile_catalog(node_name, server, certless, puppetserver_tls_cert, puppetserver_tls_key, puppetserver_tls_ca, derive_trusted_facts)
2121
clean_sensitive_parameters!(catalog)
2222
clean_nested_sensitive_parameters!(catalog)
2323
catalog
@@ -68,7 +68,7 @@ def get_catalog_from_puppetdb(node_name, server, puppetdb, puppetdb_tls_cert, pu
6868
convert_pdb(catalog)
6969
end
7070

71-
def compile_catalog(node_name, server, certless, tls_cert, tls_key, tls_ca)
71+
def compile_catalog(node_name, server, certless, tls_cert, tls_key, tls_ca, derive_trusted_facts)
7272
Puppet.debug("Compiling catalog for #{node_name}")
7373
server, environment = server.split('/')
7474
environment ||= lookup_environment(node_name)
@@ -92,6 +92,18 @@ def compile_catalog(node_name, server, certless, tls_cert, tls_key, tls_ca)
9292
prefer_requested_environment: true,
9393
},
9494
}
95+
if derive_trusted_facts
96+
body['trusted_facts'] = {
97+
values: {
98+
domain: node_name.split('.')[1..],
99+
certname: node_name,
100+
external: {},
101+
hostname: node_name.split('.')[0],
102+
extensions: {},
103+
authenticated: 'remote',
104+
},
105+
}
106+
end
95107
else
96108
endpoint = "/puppet/v3/catalog/#{node_name}?environment=#{environment}"
97109
end

lib/puppet/face/catalog/diff.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@
123123
default_to { puppetdb_url }
124124
end
125125

126+
option '--derive_trusted_facts' do
127+
summary 'Derive trusted facts from node name when using certless API. When disabled, Puppet will use trusted facts from PuppetDB.'
128+
end
129+
126130
description <<-EOT
127131
Prints the differences between catalogs compiled by different puppet master to help
128132
during migrating to a new Puppet version.
@@ -226,7 +230,8 @@
226230
old_puppetserver_tls_key: options[:old_puppetserver_tls_key],
227231
old_puppetserver_tls_ca: options[:old_puppetserver_tls_ca],
228232
new_puppetdb: options[:new_puppetdb],
229-
node_list: options[:node_list]
233+
node_list: options[:node_list],
234+
derive_trusted_facts: options[:derive_trusted_facts]
230235
)
231236
diff_output = Puppet::Face[:catalog, '0.0.1'].diff(old_catalogs, new_catalogs, options)
232237
nodes = diff_output

lib/puppet/face/catalog/pull.rb

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@
9393
summary 'A manual list of nodes to run catalog diffs against'
9494
end
9595

96+
option '--derive_trusted_facts' do
97+
summary 'Derive trusted facts from node name when using certless API. When disabled, Puppet will use trusted facts from PuppetDB.'
98+
end
99+
96100
description <<-EOT
97101
This action is used to seed a series of catalogs from two servers
98102
EOT
@@ -147,22 +151,25 @@
147151
puppetdb_tls_ca: options[:old_puppetdb_tls_ca],
148152
puppetserver_tls_cert: options[:old_puppetserver_tls_cert],
149153
puppetserver_tls_key: options[:old_puppetserver_tls_key],
150-
puppetserver_tls_ca: options[:old_puppetserver_tls_ca]
154+
puppetserver_tls_ca: options[:old_puppetserver_tls_ca],
155+
derive_trusted_facts: options[:derive_trusted_facts]
151156
)
152157
new_server = Puppet::Face[:catalog, '0.0.1'].seed(
153158
catalog2, node_name,
154159
master_server: options[:new_server],
155160
certless: options[:certless],
156161
catalog_from_puppetdb: options[:new_catalog_from_puppetdb],
157-
puppetdb: options[:new_puppetdb]
162+
puppetdb: options[:new_puppetdb],
163+
derive_trusted_facts: options[:derive_trusted_facts]
158164
)
159165
else
160166
new_server = Puppet::Face[:catalog, '0.0.1'].seed(
161167
catalog2, node_name,
162168
master_server: options[:new_server],
163169
certless: options[:certless],
164170
catalog_from_puppetdb: options[:new_catalog_from_puppetdb],
165-
puppetdb: options[:new_puppetdb]
171+
puppetdb: options[:new_puppetdb],
172+
derive_trusted_facts: options[:derive_trusted_facts]
166173
)
167174
old_server = Puppet::Face[:catalog, '0.0.1'].seed(
168175
catalog1, node_name,
@@ -175,7 +182,8 @@
175182
puppetdb_tls_ca: options[:old_puppetdb_tls_ca],
176183
puppetserver_tls_cert: options[:old_puppetserver_tls_cert],
177184
puppetserver_tls_key: options[:old_puppetserver_tls_key],
178-
puppetserver_tls_ca: options[:old_puppetserver_tls_ca]
185+
puppetserver_tls_ca: options[:old_puppetserver_tls_ca],
186+
derive_trusted_facts: options[:derive_trusted_facts]
179187
)
180188
end
181189
mutex.synchronize { compiled_nodes + old_server[:compiled_nodes] }

lib/puppet/face/catalog/seed.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@
5858
default_to { localcacert }
5959
end
6060

61+
option '--derive_trusted_facts' do
62+
summary 'Derive trusted facts from node name when using certless API. When disabled, Puppet will use trusted facts from PuppetDB.'
63+
end
64+
6165
description <<-EOT
6266
This action is used to seed a series of catalogs to then be compared with diff
6367
EOT
@@ -109,7 +113,8 @@
109113
options[:puppetdb_tls_ca],
110114
options[:puppetserver_tls_cert],
111115
options[:puppetserver_tls_key],
112-
options[:puppetserver_tls_ca]
116+
options[:puppetserver_tls_ca],
117+
options[:derive_trusted_facts]
113118
)
114119
mutex.synchronize { compiled_nodes << node_name }
115120
rescue Exception => e

0 commit comments

Comments
 (0)