knife-flip 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # knife-flip
2
2
 
3
- A knife plugin to move a node from one environment to another
3
+ A knife plugin to move a node, or all nodes in a role, to a specific environment
4
4
 
5
5
  ## What it does
6
6
 
@@ -10,3 +10,9 @@ knife node flip mynode.foo.com myenv
10
10
 
11
11
  will move the node mynode.foo.com into the environment myenv
12
12
 
13
+
14
+ ````
15
+ knife role flip MyRole myenv
16
+ ````
17
+
18
+ will move all nodes containing the role MyRole in their runlists into the environment myenv
data/knife-flip.gemspec CHANGED
@@ -13,14 +13,14 @@ Gem::Specification.new do |s|
13
13
  ## If your rubyforge_project name is different, then edit it and comment out
14
14
  ## the sub! line in the Rakefile
15
15
  s.name = 'knife-flip'
16
- s.version = '0.1.0'
17
- s.date = '2012-01-28'
16
+ s.version = '0.1.2'
17
+ s.date = '2012-02-01'
18
18
  s.rubyforge_project = 'knife-flip'
19
19
 
20
20
  ## Make sure your summary is short. The description may be as long
21
21
  ## as you like.
22
- s.summary = "A knife plugin to move a node from one environment to another"
23
- s.description = "A knife plugin to move a node from one environment to another"
22
+ s.summary = "A knife plugin to move a node, or all nodes in a role, to a specific environment"
23
+ s.description = "A knife plugin to move a node, or all nodes in a role, to a specific environment"
24
24
 
25
25
  ## List the primary authors. If there are a bunch of authors, it's probably
26
26
  ## better to set the email to an email list or something. If you don't have
@@ -50,7 +50,8 @@ Gem::Specification.new do |s|
50
50
  README.md
51
51
  Rakefile
52
52
  knife-flip.gemspec
53
- lib/chef/knife/flip.rb
53
+ lib/chef/knife/nodeflip.rb
54
+ lib/chef/knife/roleflip.rb
54
55
  lib/knife-flip.rb
55
56
  ]
56
57
  # = MANIFEST =
File without changes
@@ -0,0 +1,100 @@
1
+ #
2
+ # Author:: Jon Cowie (<jonlives@gmail.com>)
3
+ # Copyright:: Copyright (c) 2011 Jon Cowie
4
+ # License:: GPL
5
+
6
+
7
+ require 'chef/knife'
8
+
9
+ module KnifeFlip
10
+ class RoleFlip < Chef::Knife
11
+
12
+ deps do
13
+ require 'chef/search/query'
14
+ require 'chef/knife/search'
15
+ end
16
+
17
+ banner "knife role flip ROLENAME ENVIRONMENT"
18
+
19
+ def run
20
+ unless @role = name_args[0]
21
+ ui.error "You need to specify a role to search against"
22
+ exit 1
23
+ end
24
+
25
+ unless @new_env = name_args[1]
26
+ ui.error "You need to specify an environment to move nodes to"
27
+ exit 1
28
+ end
29
+
30
+ puts "Checking for a role called #{@role} to flip nodes from..."
31
+
32
+ searcher = Chef::Search::Query.new
33
+ result = searcher.search(:role, "name:#{@role}")
34
+
35
+ knife_search = Chef::Knife::Search.new
36
+ env = result.first.first
37
+ if env.nil?
38
+ puts "Could not find an role named #{@role}. Can't update nodes which run a non-existant role!"
39
+ exit 1
40
+ else
41
+ puts "Found!\n"
42
+ end
43
+
44
+
45
+ puts "Checking for an environment called #{@new_env} to update to..."
46
+
47
+ searcher = Chef::Search::Query.new
48
+ result = searcher.search(:environment, "name:#{@new_env}")
49
+
50
+ knife_search = Chef::Knife::Search.new
51
+ env = result.first.first
52
+ if env.nil?
53
+ puts "Could not find an environment named #{@new_env}. Please create it before trying to put nodes in it!"
54
+ exit 1
55
+ else
56
+ puts "Found!\n"
57
+ end
58
+
59
+ #puts "Setting environment to #{@environment}"
60
+ #node.chef_environment(@environment)
61
+ #node.save
62
+
63
+ q_nodes = Chef::Search::Query.new
64
+ node_query = "role:#{@role}"
65
+ query_nodes = URI.escape(node_query,
66
+ Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
67
+
68
+ result_items = []
69
+ result_count = 0
70
+
71
+ #ui.msg("\nFinding all nodes in environment #{@old_env} and moving them to environment #{@new_env}...\n")
72
+
73
+ begin
74
+ q_nodes.search('node', query_nodes) do |node_item|
75
+
76
+ node_item.chef_environment(@new_env)
77
+ node_item.save
78
+ formatted_item_node = format_for_display(node_item)
79
+ if formatted_item_node.respond_to?(:has_key?) && !formatted_item_node.has_key?('id')
80
+ formatted_item_node['id'] = node_item.has_key?('id') ? node_item['id'] : node_item.name
81
+ end
82
+ ui.msg("Moving #{formatted_item_node.name} to environment #{@new_env}...")
83
+ result_items << formatted_item_node
84
+ result_count += 1
85
+ end
86
+ rescue Net::HTTPServerException => e
87
+ msg = Chef::JSONCompat.from_json(e.response.body)["error"].first
88
+ ui.error("knife role flip failed: #{msg}")
89
+ exit 1
90
+ end
91
+
92
+ if ui.interchange?
93
+ output({:results => result_count, :rows => result_items})
94
+ else
95
+ ui.msg "#{result_count} Nodes updated"
96
+ end
97
+
98
+ end
99
+ end
100
+ end
data/lib/knife-flip.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module KnifeFlip
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 2
9
+ version: 0.1.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jon Cowie
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-01-28 00:00:00 +00:00
17
+ date: 2012-02-01 00:00:00 +00:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 0.10.4
33
33
  type: :runtime
34
34
  version_requirements: *id001
35
- description: A knife plugin to move a node from one environment to another
35
+ description: A knife plugin to move a node, or all nodes in a role, to a specific environment
36
36
  email: jonlives@gmail.com
37
37
  executables: []
38
38
 
@@ -44,7 +44,8 @@ files:
44
44
  - README.md
45
45
  - Rakefile
46
46
  - knife-flip.gemspec
47
- - lib/chef/knife/flip.rb
47
+ - lib/chef/knife/nodeflip.rb
48
+ - lib/chef/knife/roleflip.rb
48
49
  - lib/knife-flip.rb
49
50
  has_rdoc: true
50
51
  homepage: https://github.com/jonlives/knife-flip
@@ -77,6 +78,6 @@ rubyforge_project: knife-flip
77
78
  rubygems_version: 1.3.7
78
79
  signing_key:
79
80
  specification_version: 2
80
- summary: A knife plugin to move a node from one environment to another
81
+ summary: A knife plugin to move a node, or all nodes in a role, to a specific environment
81
82
  test_files: []
82
83