knife-killer 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 50b235eede535ea5802bc9275fdd8529d64ff318
4
+ data.tar.gz: 97e65def414fca298bd14c82d1c89270645938a5
5
+ SHA512:
6
+ metadata.gz: 45537f54fa7eba470c55d6113eb7ffc57829a1a303464b0431f355a6c09dc14732c916c972d303a534b49399faa02e77f2de1de862e66bbf4fcb6b8741ee9b77
7
+ data.tar.gz: f54dff0d3abef68dd1dcfb1f12199883971965c99f0ba432069dc477bec4d318ef63df82a88f54541b6800f638dda24b0b6ded8c53523ab133d32ad48e75eb50
data/CHANGELOG.md ADDED
@@ -0,0 +1,2 @@
1
+ ## v0.1.0
2
+ * Initial release
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2014 Chris Roberts
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,33 @@
1
+ ## Knife Killer
2
+
3
+ Simple knife helper to fully kill nodes (including their corresponding
4
+ client data) from the chef server. It provides two commands for this:
5
+
6
+ ```bash
7
+ $ knife killer execute NODE_NAME1 NODE_NAME2
8
+ ```
9
+
10
+ This is used for removing instances explicitly. However, you may just want
11
+ to remove them with a search:
12
+
13
+ ```bash
14
+ $ knife killer slaughter "roles:fubar"
15
+ ```
16
+
17
+ Or perhaps you just want to kill things that haven't checked in for more
18
+ than 60 minutes:
19
+
20
+ ```bash
21
+ $ knife killer slaughter -M 60
22
+ ```
23
+
24
+ Which you can combine with the searching:
25
+
26
+ ```bash
27
+ $ knife killer slaughter -M 60 "roles:fubar"
28
+ ```
29
+
30
+ Pretty simple plugin just to make common process faster.
31
+
32
+ ## Info
33
+ Repository: https://github.com/chrisroberts/knife-killer
@@ -0,0 +1,15 @@
1
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)) + '/lib/'
2
+ require 'knife-killer/version'
3
+ Gem::Specification.new do |s|
4
+ s.name = 'knife-killer'
5
+ s.version = KnifeKiller::VERSION.version
6
+ s.summary = 'Knife cleanup helper'
7
+ s.author = 'Chris Roberts'
8
+ s.email = 'code@chrisroberts.org'
9
+ s.homepage = 'http://github.com/chrisroberts/knife-killer'
10
+ s.description = 'Knife cleanup helper'
11
+ s.license = 'Apache 2.0'
12
+ s.require_path = 'lib'
13
+ s.add_dependency 'chef'
14
+ s.files = Dir['lib/**/*'] + %w(knife-killer.gemspec README.md CHANGELOG.md LICENSE)
15
+ end
@@ -0,0 +1,19 @@
1
+ require 'knife-killer'
2
+
3
+ class Chef
4
+ class Knife
5
+ class KillerExecute < Knife
6
+
7
+ include KnifeKiller::Common
8
+
9
+ banner 'knife killer execute NODE_NAME[ NODE_NAME...]'
10
+
11
+ def run
12
+ name_args.each do |name|
13
+ scrub(name)
14
+ end
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,35 @@
1
+ require 'knife-killer'
2
+
3
+ class Chef
4
+ class Knife
5
+ class KillerSlaughter < Knife
6
+
7
+ include KnifeKiller::Common
8
+
9
+ banner 'knife killer slaughter SEARCH'
10
+
11
+ option(:over_minutes,
12
+ :short => '-M INT',
13
+ :long => '--minutes-since-checkin INT',
14
+ :description => 'Kill all that have not checked for more than given time'
15
+ )
16
+
17
+ def run
18
+ if(config[:over_minutes])
19
+ cutoff = Time.now.to_f - (config[:over_minutes].to_i * 60)
20
+ term = "ohai_time:[0.0 TO #{cutoff}]"
21
+ end
22
+ result = Chef::Search::Query.new.search(:node, [name_args.first, term].flatten.compact.join(' AND '))
23
+ if(result.first.empty?)
24
+ warn 'No results found!'
25
+ else
26
+ confirm "Found #{result.first.size} matches. Proceed"
27
+ result.first.each do |node|
28
+ scrub(node.name)
29
+ end
30
+ end
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,25 @@
1
+ require 'knife-killer/version'
2
+
3
+ module KnifeKiller
4
+ module Common
5
+
6
+ def scrub(name)
7
+ confirm "Delete node and client for #{name}"
8
+ begin
9
+ node = Chef::Node.load(name)
10
+ node.destroy
11
+ ui.info "Node #{name}: #{ui.color('deleted', :red)}"
12
+ rescue => e
13
+ ui.warn "Node #{name}: #{ui.color('FAILED!', :bold)} - #{e.class}: #{e}"
14
+ end
15
+ begin
16
+ client = Chef::ApiClient.load(name)
17
+ client.destroy
18
+ ui.info "Client #{name}: #{ui.color('deleted', :red)}"
19
+ rescue => e
20
+ ui.warn "Client #{name}: #{ui.color('FAILED!', :bold)} - #{e.class}: #{e}"
21
+ end
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ module KnifeKiller
2
+ VERSION = Gem::Version.new('0.1.0')
3
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: knife-killer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Roberts
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: chef
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Knife cleanup helper
28
+ email: code@chrisroberts.org
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - CHANGELOG.md
34
+ - LICENSE
35
+ - README.md
36
+ - knife-killer.gemspec
37
+ - lib/chef/knife/killer_execute.rb
38
+ - lib/chef/knife/killer_slaughter.rb
39
+ - lib/knife-killer.rb
40
+ - lib/knife-killer/version.rb
41
+ homepage: http://github.com/chrisroberts/knife-killer
42
+ licenses:
43
+ - Apache 2.0
44
+ metadata: {}
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project:
61
+ rubygems_version: 2.2.2
62
+ signing_key:
63
+ specification_version: 4
64
+ summary: Knife cleanup helper
65
+ test_files: []
66
+ has_rdoc: