Node PuppetDB query
A JavaScript version of the puppetdbquery module for puppet.
It is written using JISON and ast-types.
var puppetdbquery = ;puppetdbquery;// ["and",// ["or",// ["in","certname",// ["extract","certname",// ["select_fact_contents",// ["and", ["=","path", ["puppetversion"]],["=","value","3.6.2"]]]]],// ["in","certname",// ["extract","certname",// ["select_fact_contents",// ["and", ["=","path",["puppetversion"]],["=","value","3.7.0"]]]]]],// ["in","certname",// ["extract","certname",// ["select_fact_contents",// ["and",["=","path",["kernel"]],["=","value","Linux"]]]]]]
The find-nodes utility is included as an example on how to use it.
Syntax
Use fact=value
to search for nodes where fact
equals value
. To search for
structured facts use dots between each part of the fact path, for example
foo.bar=baz
.
Resources can be matched using the syntax type[title]{param=value}
.
The part in brackets is optional. You can also specify ~
before the title
to do a regexp match on the title. Type names and class names are case insensitive.
A resource can be preceded by @@ to match exported resources, the default is to only
match "local" resources.
Strings can contain letters, numbers or the characters :-_ without needing to be quoted. If they contain any other characters they need to be quoted with single or double quotes. Use backslash () to escape quotes within a quoted string or double backslash for backslashes.
An unquoted number or the strings true/false will be interpreted as numbers and boolean values, use quotation marks around them to search for them as strings instead.
A @ sign before a string causes it to be interpreted as a date parsed with
timespec. For example @"now - 2 hours"
.
A # sign can be used to do a subquery, against the nodes endpoint for example to
query the report_timestamp
, catalog_timestamp
or facts_timestamp
fields.
For example #node.report_timestamp < @"now - 2 hours"
.
A subquery using the # sign can have a block of expressions instead of a single
expression. For example #node { report_timestamp > @"now - 4 hours" and report_timestamp < @"now - 2 hours" }
A bare string without comparison operator will be treated as a regexp match against the certname.
Comparison operators
Op | Meaning |
---|---|
= | Equality |
!= | Not equal |
~ | Regexp match |
!~ | Not equal Regexp match |
< | Less than |
=< | Less than or equal |
> | Greater than |
=> | Greater than or equal |
Logical operators
Op | |
---|---|
not | (unary op) |
and | |
or |
Shown in precedence order from highest to lowest. Use parenthesis to change order in an expression.
Query Examples
Nodes with package mysql-server and amd64 arcitecture
(package["mysql-server"] and architecture=amd64)
Nodes with the class Postgresql::Server and a version set to 9.3
class[postgresql::server]{version=9.3}
Nodes with 4 or 8 processors running Linux
(processorcount=4 or processorcount=8) and kernel=Linux
Nodes that haven't reported in the last 2 hours
#node.report_timestamp<@"now - 2 hours"
Required PuppetDB version
This requires at least PuppetDB 3.0.0 to work as it uses the v4 API not included in previous versions.
License
This is licensed under the Apache V2 license.