lita-puppet 0.5.4 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +13 -1
- data/lib/lita/handlers/puppet.rb +34 -0
- data/lib/utils/puppetdb.rb +8 -0
- data/lita-puppet.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71652e9e43f1a190a33ffe04320e3f89521668bb
|
4
|
+
data.tar.gz: 43e091d0e1701c4061a76ac6f497f34b57f58f9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6de78f5ca3101630efe3a9634b2fb45432c737afc73edb6a33fd91b945edf2285a84380ca1cc3010438142ddebd806fd522d270d1929e09da2dd3b69430e426d
|
7
|
+
data.tar.gz: 6cb0e7853f81ce64e3eaf8e602f4450600259d22b1bfc9b0aa6a139c720c6aa10e1d09a9cb4901408f0f6dc85d0cb5cb7f24645193c39296ec9a5fc592007343
|
data/README.md
CHANGED
@@ -12,9 +12,10 @@ gem "lita-puppet"
|
|
12
12
|
|
13
13
|
## Configuration
|
14
14
|
|
15
|
+
* `config.handlers.puppet.control_repo_path` - Path for `git pull` during r10k deployments
|
15
16
|
* `config.handlers.puppet.master_hostname` - Puppet Master's hostname
|
17
|
+
* `config.handlers.puppet.puppetdb_url` - PuppetDB hostname (for the [puppetdb-ruby](https://github.com/voxpupuli/puppetdb-ruby) gem)
|
16
18
|
* `config.handlers.puppet.ssh_user` - SSH user for the Puppet Master for r10k deployments
|
17
|
-
* `config.handlers.puppet.control_repo_path` - Path for `git pull` during r10k deployments
|
18
19
|
|
19
20
|
## Usage
|
20
21
|
|
@@ -48,3 +49,14 @@ This is also available as:
|
|
48
49
|
pp cert clean <host>
|
49
50
|
|
50
51
|
**Note** though that this doesn't do anything on the client side. If you want puppet to work on the `<host>` machine you'll need to generate a new cert. Usually you run this if you're planning to do that anyway though.
|
52
|
+
|
53
|
+
#### Query PuppetDB for the Roles and Profiles used by a node
|
54
|
+
puppet catalog <certname> profiles
|
55
|
+
|
56
|
+
This is also available as:
|
57
|
+
|
58
|
+
puppet node <certname> profiles
|
59
|
+
pp catalog <certname> profiles
|
60
|
+
pp node <certname> profiles
|
61
|
+
|
62
|
+
Where `<certname>` is the SSL certificate name used for Puppet. This is usually the FQDN for the host.
|
data/lib/lita/handlers/puppet.rb
CHANGED
@@ -34,6 +34,15 @@ module Lita
|
|
34
34
|
}
|
35
35
|
)
|
36
36
|
|
37
|
+
route(
|
38
|
+
/(puppet|pp)\s+(class)\s+(nodes)\s+(\S+)/i,
|
39
|
+
:nodes_with_class,
|
40
|
+
command: true,
|
41
|
+
help: {
|
42
|
+
"puppet class nodes <class>" => "Query PuppetDB to get a list of all nodes containing a class."
|
43
|
+
}
|
44
|
+
)
|
45
|
+
|
37
46
|
route(
|
38
47
|
/(puppet|pp)\s+(r10k|deploy)(\s+(\S+)(\s+(\S+))?)?/i,
|
39
48
|
:r10k_deploy,
|
@@ -136,6 +145,31 @@ module Lita
|
|
136
145
|
end
|
137
146
|
end
|
138
147
|
|
148
|
+
def nodes_with_class(response)
|
149
|
+
puppet_class = response.matches[0][3]
|
150
|
+
url = config.puppetdb_url
|
151
|
+
username = friendly_name(response.user.name)
|
152
|
+
|
153
|
+
unless url
|
154
|
+
cant_reply = "#{username}, I would do that, but I don't know how to connect to PuppetDB."
|
155
|
+
cant_reply << "Edit my config and add `config.handlers.puppet.puppetdb_url`."
|
156
|
+
response.reply(cant_reply)
|
157
|
+
return false
|
158
|
+
end
|
159
|
+
|
160
|
+
response.reply("#{username}, let me see what I can find in PuppetDB for you.")
|
161
|
+
|
162
|
+
puppet_classes = class_nodes(url, puppet_class)
|
163
|
+
if puppet_classes.empty?
|
164
|
+
response.reply("There are no nodes with #{puppet_class} class, are you sure its a valid class?")
|
165
|
+
return false
|
166
|
+
else
|
167
|
+
response.reply("Here are all the nodes with class #{puppet_class}:")
|
168
|
+
response.reply("/code" + puppet_classes.join("\n"))
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
|
139
173
|
def r10k_deploy(response)
|
140
174
|
environment = response.matches[0][3]
|
141
175
|
mod = response.matches[0][5]
|
data/lib/utils/puppetdb.rb
CHANGED
@@ -19,5 +19,13 @@ module Utils
|
|
19
19
|
# return all the tags related to profile:: or role::
|
20
20
|
tags.sort.uniq.select {|t| t.match /^(profile|role)::/ }
|
21
21
|
end
|
22
|
+
|
23
|
+
def class_nodes(url, classname)
|
24
|
+
client = ::PuppetDB::Client.new(server: url)
|
25
|
+
q = client.request('resources',[:and,[:'=','type', 'Class'],[:'=','title',"#{classname}"]])
|
26
|
+
|
27
|
+
q.data.map { |node| node['certname'] }
|
28
|
+
end
|
29
|
+
|
22
30
|
end
|
23
31
|
end
|
data/lita-puppet.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lita-puppet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Gnagy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lita
|
@@ -166,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
166
|
version: '0'
|
167
167
|
requirements: []
|
168
168
|
rubyforge_project:
|
169
|
-
rubygems_version: 2.
|
169
|
+
rubygems_version: 2.4.8
|
170
170
|
signing_key:
|
171
171
|
specification_version: 4
|
172
172
|
summary: Allow the Lita bot to handle requests for puppet tasks
|