knife-update 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +11 -9
- data/lib/chef/knife/update.rb +4 -4
- data/lib/chef/knife/{update_run_list.rb → update_recipes.rb} +6 -6
- data/lib/chef/knife/update_run.rb +28 -11
- data/lib/knife-update/version.rb +1 -1
- metadata +5 -5
data/README.md
CHANGED
@@ -25,22 +25,24 @@ Currently installed chef-client versions:
|
|
25
25
|
Chef 10.24.0: 1000 nodes
|
26
26
|
```
|
27
27
|
|
28
|
-
### knife update
|
28
|
+
### knife update recipes
|
29
29
|
|
30
|
-
Displays
|
30
|
+
Displays recipes both used and not yet used on nodes with the target
|
31
31
|
chef-client version.
|
32
32
|
|
33
33
|
```bash
|
34
|
-
$ knife update
|
34
|
+
$ knife update recipes
|
35
35
|
Search nodes '*:*'
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
recipes already used on Chef 10.24.0:
|
38
|
+
apt::internal
|
39
|
+
barn::barn-ctrl
|
40
|
+
chef::bootstrap_client
|
41
|
+
...
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
|
43
|
+
recipes not used on Chef 10.24.0:
|
44
|
+
hadoop::client
|
45
|
+
hadoop::datanode
|
44
46
|
```
|
45
47
|
|
46
48
|
### knife update run
|
data/lib/chef/knife/update.rb
CHANGED
@@ -67,11 +67,11 @@ class Chef
|
|
67
67
|
list
|
68
68
|
end
|
69
69
|
|
70
|
-
# List of all compatible
|
71
|
-
def
|
70
|
+
# List of all compatible recipes
|
71
|
+
def recipes(nodes)
|
72
72
|
nodes.inject([]) do |memo, node|
|
73
|
-
node.
|
74
|
-
memo <<
|
73
|
+
node.recipes.each do |recipe|
|
74
|
+
memo << recipe.to_s unless memo.include?(recipe.to_s)
|
75
75
|
end
|
76
76
|
|
77
77
|
memo
|
@@ -20,18 +20,18 @@ require 'chef/knife'
|
|
20
20
|
|
21
21
|
class Chef
|
22
22
|
class Knife
|
23
|
-
class
|
24
|
-
banner 'knife update
|
23
|
+
class UpdateRecipes < Knife
|
24
|
+
banner 'knife update recipes (options)'
|
25
25
|
|
26
26
|
include Chef::Knife::Update
|
27
27
|
|
28
28
|
def run
|
29
29
|
list = node_list
|
30
|
-
compatible =
|
31
|
-
unknown =
|
30
|
+
compatible = recipes(only(list, target_version))
|
31
|
+
unknown = recipes(except(list, target_version)) - compatible
|
32
32
|
|
33
33
|
if compatible.any?
|
34
|
-
ui.msg "
|
34
|
+
ui.msg "recipes already used on Chef #{target_version}:"
|
35
35
|
compatible.sort.each do |item|
|
36
36
|
ui.msg " #{item}"
|
37
37
|
end
|
@@ -39,7 +39,7 @@ class Chef
|
|
39
39
|
end
|
40
40
|
|
41
41
|
if unknown.any?
|
42
|
-
ui.msg "
|
42
|
+
ui.msg "recipes not used on Chef #{target_version}:"
|
43
43
|
unknown.sort.each do |item|
|
44
44
|
ui.msg " #{item}"
|
45
45
|
end
|
@@ -62,23 +62,29 @@ class Chef
|
|
62
62
|
:description => "Execute the update via sudo",
|
63
63
|
:boolean => true
|
64
64
|
|
65
|
-
option :
|
66
|
-
:short => "-
|
67
|
-
:long => "--
|
65
|
+
option :force,
|
66
|
+
:short => "-f",
|
67
|
+
:long => "--force",
|
68
68
|
:description => "Update all nodes found by the given search-query",
|
69
69
|
:boolean => true
|
70
70
|
|
71
|
+
option :dry_run,
|
72
|
+
:short => "-D",
|
73
|
+
:long => "--dry-run",
|
74
|
+
:description => "Only collect updateable nodes and display them",
|
75
|
+
:boolean => true
|
76
|
+
|
71
77
|
include Chef::Knife::Update
|
72
78
|
|
73
79
|
def run
|
74
80
|
list = node_list
|
75
|
-
compatible =
|
76
|
-
unknown =
|
81
|
+
compatible = recipes(only(list, target_version))
|
82
|
+
unknown = recipes(except(list, target_version)) - compatible
|
77
83
|
|
78
84
|
nodes = list.inject([]) do |memo, (version, nodes)|
|
79
85
|
if version != target_version
|
80
86
|
nodes.each do |node|
|
81
|
-
if config[:
|
87
|
+
if config[:force] || node.recipes.all? { |recipe| compatible.include?(recipe) }
|
82
88
|
memo << node
|
83
89
|
end
|
84
90
|
end
|
@@ -87,12 +93,23 @@ class Chef
|
|
87
93
|
memo
|
88
94
|
end
|
89
95
|
|
90
|
-
if config[:
|
91
|
-
ui.warn
|
96
|
+
if config[:force] && unknown.any?
|
97
|
+
ui.warn "It's unknown if the following recipes are Chef #{target_version} compatible: #{unknown.sort.join(', ')}"
|
92
98
|
end
|
93
99
|
|
94
|
-
|
95
|
-
|
100
|
+
if nodes.size > 0
|
101
|
+
if !config[:dry_run]
|
102
|
+
ui.confirm "Are you sure you want to update #{nodes.size} nodes to chef #{target_version}"
|
103
|
+
update_ssh(nodes, target_version).run
|
104
|
+
else
|
105
|
+
ui.msg "Dry run. The following #{nodes.size} nodes would get updated:"
|
106
|
+
nodes.each { |node| ui.msg " #{node.fqdn}" }
|
107
|
+
end
|
108
|
+
elsif list.size > 0
|
109
|
+
ui.msg "None of the nodes can be updated. Try option --force"
|
110
|
+
else
|
111
|
+
ui.msg "No nodes found."
|
112
|
+
end
|
96
113
|
end
|
97
114
|
|
98
115
|
# Update given nodes to specified version
|
@@ -103,13 +120,13 @@ class Chef
|
|
103
120
|
ssh.ui = ui
|
104
121
|
ssh.name_args = [ fqdns, ssh_command(version) ]
|
105
122
|
ssh.config[:manual] = true
|
123
|
+
ssh.config[:on_error] = :skip
|
106
124
|
ssh.config[:ssh_user] = Chef::Config[:knife][:ssh_user] || config[:ssh_user]
|
107
125
|
ssh.config[:ssh_password] = config[:ssh_password]
|
108
126
|
ssh.config[:ssh_port] = Chef::Config[:knife][:ssh_port] || config[:ssh_port]
|
109
127
|
ssh.config[:ssh_gateway] = Chef::Config[:knife][:ssh_gateway] || config[:ssh_gateway]
|
110
128
|
ssh.config[:identity_file] = Chef::Config[:knife][:identity_file] || config[:identity_file]
|
111
129
|
ssh.config[:host_key_verify] = Chef::Config[:knife][:host_key_verify] || config[:host_key_verify]
|
112
|
-
ssh.config[:on_error] = :raise
|
113
130
|
ssh
|
114
131
|
end
|
115
132
|
|
data/lib/knife-update/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-update
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chef
|
@@ -58,8 +58,8 @@ files:
|
|
58
58
|
- Rakefile
|
59
59
|
- knife-update.gemspec
|
60
60
|
- lib/chef/knife/update.rb
|
61
|
+
- lib/chef/knife/update_recipes.rb
|
61
62
|
- lib/chef/knife/update_run.rb
|
62
|
-
- lib/chef/knife/update_run_list.rb
|
63
63
|
- lib/chef/knife/update_status.rb
|
64
64
|
- lib/knife-update/version.rb
|
65
65
|
- spec/spec_helper.rb
|
@@ -78,7 +78,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
78
78
|
version: '0'
|
79
79
|
segments:
|
80
80
|
- 0
|
81
|
-
hash:
|
81
|
+
hash: 4121929708377413220
|
82
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
@@ -87,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
87
|
version: '0'
|
88
88
|
segments:
|
89
89
|
- 0
|
90
|
-
hash:
|
90
|
+
hash: 4121929708377413220
|
91
91
|
requirements: []
|
92
92
|
rubyforge_project:
|
93
93
|
rubygems_version: 1.8.25
|