knife-update 0.0.2 → 0.0.4
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.
- 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
|