knife-zero 0.0.2 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 669006724c6e47cce3b95f94d477e974a57a32ab
4
- data.tar.gz: 94d34c6bd8708e218f179b15179e7ae8359109dd
3
+ metadata.gz: 52c93c2a006243fcbd0e0ad73eb140a8336b73d6
4
+ data.tar.gz: 718d5d1c551c145af599aaa9a9e0f3a40a6bcdec
5
5
  SHA512:
6
- metadata.gz: 87bfb41b3ff229dbf057ef52307d763d57514ce373ef51fb118da4b905d09e75fa625c0679c92bb2d9febdcaf8f28ce461574e21016b107e7977810f2677761e
7
- data.tar.gz: 85bf85f129c80d70f2ddf1b4ee646ff13d8420e46760b14cf5390d783d42400806fa5cd3c85ef4ddd9c1e2c3f74148141a0d3602f97c940a18d767746fdb4ef9
6
+ metadata.gz: d62de79dcd29220aa558f044e3ef10d7f42f95c8d8e6c397df1d571c987eb11310b52da7bc6226d1d366f17b03e5c3358c205ef6999065b49e28d7b6b8849720
7
+ data.tar.gz: d942ed977b211e2ee6f33305c1b9cb85e291d465cf50ed16837cf0c8b4e96c076acaa49e3c4c548c5808e6f5890c4d4bacca5aa704d977ac50c9844a178a9017
data/CHANGELOG.md ADDED
@@ -0,0 +1,15 @@
1
+ # Changelog of knife-zero
2
+
3
+ ## v0.1.1
4
+
5
+ - Bug: Issue #1 NoMethodError: undefined method 'split' for nil:NilClass at bootstrap
6
+
7
+ ## v0.1.0 (yanked)
8
+
9
+ - Feature: run Chef-Client by Seach query.
10
+
11
+
12
+ ## v0.0.2
13
+
14
+ - initial release
15
+ - Feature: bootstrap with chefzero via tcp-forward
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Knife-Plugin Zero
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/knife-zero.svg)](http://badge.fury.io/rb/knife-zero)
4
+ [![Stories in Ready](https://badge.waffle.io/higanworks/knife-zero.svg?label=ready&title=Ready)](http://waffle.io/higanworks/knife-zero)
5
+ [![Stories in Progress](https://badge.waffle.io/higanworks/knife-zero.svg?label=In%20Progress&title=In%20Progress)](http://waffle.io/higanworks/knife-zero)
4
6
 
5
7
  Run chef-client at remote node with chef-zero(local-mode) via HTTP over SSH port fowarding.
6
8
 
@@ -32,9 +34,10 @@ Or install it yourself as:
32
34
  ```
33
35
  ** ZERO COMMANDS **
34
36
  knife zero bootstrap FQDN (options)
37
+ knife zero chef_client QUERY (options)
35
38
  ```
36
39
 
37
- ### Bootstrap
40
+ ### knife zero bootstrap
38
41
 
39
42
  Install Chef to remote node and run chef-client under chef-zero via tcp-forward.
40
43
 
@@ -56,6 +59,7 @@ host.example.com Starting first Chef Client run...
56
59
  host.example.com Starting Chef Client, version 11.14.6
57
60
  host.example.com Creating a new client identity for host.example.com using the validator key.
58
61
 
62
+
59
63
  ## Resolv and sync cookbook via http over ssh tcp-forward by run-list.
60
64
  host.example.com resolving cookbooks for run list: ["hogehoge::default"]
61
65
  host.example.com Synchronizing Cookbooks:
@@ -102,13 +106,56 @@ xxx.xxx.xxx.xxx 08:41:36 up 1:03, 1 user, load average: 0.00, 0.01, 0.01
102
106
  xxx.xxx.xxx.xxx 08:41:37 up 143 days, 2:32, 4 users, load average: 0.00, 0.01, 0.05
103
107
  ```
104
108
 
105
- ### Update(pending)
109
+ ### knife zero chef_client (for update)
110
+
111
+ `knife zero chef_client QUERY (options)`
106
112
 
107
113
  Search nodes from local chef-repo directory, and run command at remote node.
108
114
 
109
115
  Supported options are mostly the same as `knife ssh`.
110
116
 
111
- > Pending
117
+ #### Example
118
+
119
+ ```
120
+ ## Chef-Repo has two nodes
121
+ $ knife node list --local-mode
122
+ host.example.com
123
+ host2.example.com
124
+
125
+ ## add recipe to run_list of host.example.com
126
+ $ knife node run_list add host.example.com hogehoge::default --local-mode
127
+ host.example.com:
128
+ run_list: recipe[hogehoge::default]
129
+
130
+
131
+ $ knife zero chef_client 'name:*' --attribute ipaddress
132
+
133
+ ## host.example.com was converged by run_list.
134
+ host.example.com Starting Chef Client, version 11.14.6
135
+ host.example.com resolving cookbooks for run list: ["hogehoge::default"]
136
+ host.example.com Synchronizing Cookbooks:
137
+ host.example.com - hogehoge
138
+ host.example.com Compiling Cookbooks...
139
+ host.example.com Converging 0 resources
140
+ host.example.com
141
+ host.example.com Running handlers:
142
+ host.example.com Running handlers complete
143
+ host.example.com Chef Client finished, 0/0 resources updated in 3.112708185 seconds
144
+
145
+
146
+ ## host2.example.com has no run_list.
147
+ host2.example.com Starting Chef Client, version 11.14.2
148
+ host2.example.com resolving cookbooks for run list: []
149
+ host2.example.com Synchronizing Cookbooks:
150
+ host2.example.com Compiling Cookbooks...
151
+ host2.example.com [2014-08-24T11:52:15+00:00] WARN: Node ngrok01.xenzai.net has an empty run list.
152
+ host2.example.com Converging 0 resources
153
+ host2.example.com
154
+ host2.example.com Running handlers:
155
+ host2.example.com Running handlers complete
156
+ host2.example.com Chef Client finished, 0/0 resources updated in 3.729471856 seconds
157
+ ```
158
+
112
159
 
113
160
  ## Sample Workflow
114
161
 
@@ -0,0 +1,49 @@
1
+ require 'chef/knife'
2
+ require 'chef/knife/zero_base'
3
+
4
+ class Chef
5
+ class Knife
6
+ class ZeroChefClient < Chef::Knife::Ssh
7
+ include Chef::Knife::ZeroBase
8
+ deps do
9
+ require 'chef/node'
10
+ require 'chef/environment'
11
+ require 'chef/api_client'
12
+ require 'chef/search/query'
13
+ require 'knife-zero/bootstrap_ssh'
14
+ Chef::Knife::BootstrapSsh.load_deps
15
+ end
16
+
17
+ banner "knife zero chef_client QUERY (options)"
18
+
19
+ option :attribute,
20
+ :short => "-a ATTR",
21
+ :long => "--attribute ATTR",
22
+ :description => "The attribute to use for opening the connection - default depends on the context",
23
+ :proc => Proc.new { |key| Chef::Config[:knife][:ssh_attribute] = key.strip }
24
+
25
+ def run
26
+ configure_attribute
27
+ configure_user
28
+ configure_password
29
+ configure_identity_file
30
+ list = search_nodes
31
+
32
+ list.each do |n|
33
+ Chef::Log.debug("Start session for #{n}")
34
+ session = knife_ssh
35
+ session.configure_session(n)
36
+ session.ssh_command(start_chef_client)
37
+ end
38
+ end
39
+
40
+ def start_chef_client
41
+ client_path = @config[:chef_client_path] || 'chef-client'
42
+ s = "#{client_path}"
43
+ s << ' -l debug' if @config[:verbosity] and @config[:verbosity] >= 2
44
+ s << " -S http://127.0.0.1:8889"
45
+ s
46
+ end
47
+ end
48
+ end
49
+ end
@@ -58,6 +58,22 @@ class Chef
58
58
  end
59
59
  end
60
60
 
61
+ def knife_ssh
62
+ ssh = Chef::Knife::BootstrapSsh.new
63
+ ssh.ui = ui
64
+ ssh.name_args = [ server_name, ssh_command ] unless ssh.name_args.empty?
65
+ ssh.config[:ssh_user] = Chef::Config[:knife][:ssh_user] || config[:ssh_user]
66
+ ssh.config[:ssh_password] = config[:ssh_password]
67
+ ssh.config[:ssh_port] = Chef::Config[:knife][:ssh_port] || config[:ssh_port]
68
+ ssh.config[:ssh_gateway] = Chef::Config[:knife][:ssh_gateway] || config[:ssh_gateway]
69
+ ssh.config[:forward_agent] = Chef::Config[:knife][:forward_agent] || config[:forward_agent]
70
+ ssh.config[:identity_file] = Chef::Config[:knife][:identity_file] || config[:identity_file]
71
+ ssh.config[:manual] = true
72
+ ssh.config[:host_key_verify] = Chef::Config[:knife][:host_key_verify] || config[:host_key_verify]
73
+ ssh.config[:on_error] = :raise
74
+ ssh
75
+ end
76
+
61
77
  private
62
78
 
63
79
  def locate_config_value(key)
@@ -80,36 +80,36 @@ class Chef
80
80
  name, path = h.split("=")
81
81
  Chef::Config[:knife][:hints][name] = path ? Chef::JSONCompat.parse(::File.read(path)) : Hash.new }
82
82
 
83
- option :secret,
84
- :short => "-s SECRET",
85
- :long => "--secret ",
86
- :description => "The secret key to use to encrypt data bag item values",
87
- :proc => Proc.new { |s| Chef::Config[:knife][:secret] = s }
88
-
89
- option :secret_file,
90
- :long => "--secret-file SECRET_FILE",
91
- :description => "A file containing the secret key to use to encrypt data bag item values",
92
- :proc => Proc.new { |sf| Chef::Config[:knife][:secret_file] = sf }
93
-
94
- option :bootstrap_url,
95
- :long => "--bootstrap-url URL",
96
- :description => "URL to a custom installation script",
97
- :proc => Proc.new { |u| Chef::Config[:knife][:bootstrap_url] = u }
98
-
99
- option :bootstrap_install_command,
100
- :long => "--bootstrap-install-command COMMANDS",
101
- :description => "Custom command to install chef-client",
102
- :proc => Proc.new { |ic| Chef::Config[:knife][:bootstrap_install_command] = ic }
103
-
104
- option :bootstrap_wget_options,
105
- :long => "--bootstrap-wget-options OPTIONS",
106
- :description => "Add options to wget when installing chef-client",
107
- :proc => Proc.new { |wo| Chef::Config[:knife][:bootstrap_wget_options] = wo }
108
-
109
- option :bootstrap_curl_options,
110
- :long => "--bootstrap-curl-options OPTIONS",
111
- :description => "Add options to curl when install chef-client",
112
- :proc => Proc.new { |co| Chef::Config[:knife][:bootstrap_curl_options] = co }
83
+ option :secret,
84
+ :short => "-s SECRET",
85
+ :long => "--secret ",
86
+ :description => "The secret key to use to encrypt data bag item values",
87
+ :proc => Proc.new { |s| Chef::Config[:knife][:secret] = s }
88
+
89
+ option :secret_file,
90
+ :long => "--secret-file SECRET_FILE",
91
+ :description => "A file containing the secret key to use to encrypt data bag item values",
92
+ :proc => Proc.new { |sf| Chef::Config[:knife][:secret_file] = sf }
93
+
94
+ option :bootstrap_url,
95
+ :long => "--bootstrap-url URL",
96
+ :description => "URL to a custom installation script",
97
+ :proc => Proc.new { |u| Chef::Config[:knife][:bootstrap_url] = u }
98
+
99
+ option :bootstrap_install_command,
100
+ :long => "--bootstrap-install-command COMMANDS",
101
+ :description => "Custom command to install chef-client",
102
+ :proc => Proc.new { |ic| Chef::Config[:knife][:bootstrap_install_command] = ic }
103
+
104
+ option :bootstrap_wget_options,
105
+ :long => "--bootstrap-wget-options OPTIONS",
106
+ :description => "Add options to wget when installing chef-client",
107
+ :proc => Proc.new { |wo| Chef::Config[:knife][:bootstrap_wget_options] = wo }
108
+
109
+ option :bootstrap_curl_options,
110
+ :long => "--bootstrap-curl-options OPTIONS",
111
+ :description => "Add options to curl when install chef-client",
112
+ :proc => Proc.new { |co| Chef::Config[:knife][:bootstrap_curl_options] = co }
113
113
 
114
114
  def knife_ssh
115
115
  ssh = Chef::Knife::BootstrapSsh.new
@@ -127,6 +127,10 @@ class Chef
127
127
  ssh
128
128
  end
129
129
 
130
+ alias :default_run :run
131
+ def run
132
+ default_run
133
+ end
130
134
  end
131
135
  end
132
136
  end
@@ -3,8 +3,8 @@ require 'chef/knife/ssh'
3
3
  class Chef
4
4
  class Knife
5
5
  class BootstrapSsh < Chef::Knife::Ssh
6
- def configure_session
7
- host, ssh_port = @name_args[0].split(" ")
6
+ def configure_session(args = @name_args)
7
+ host, ssh_port = args[0].split(" ")
8
8
  @longest = host.length
9
9
 
10
10
  Chef::Log.debug("Configration for #{host}")
@@ -1,6 +1,6 @@
1
1
  module Knife
2
2
  module Zero
3
- VERSION = "0.0.2"
3
+ VERSION = "0.1.1"
4
4
  MAJOR, MINOR, TINY = VERSION.split('.')
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-zero
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - sawanoboly
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-21 00:00:00.000000000 Z
11
+ date: 2014-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -61,12 +61,14 @@ extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
63
  - ".gitignore"
64
+ - CHANGELOG.md
64
65
  - Gemfile
65
66
  - LICENSE.txt
66
67
  - README.md
67
68
  - Rakefile
68
69
  - knife-zero.gemspec
69
70
  - lib/chef/knife/bootstrap/chef-full-localmode.erb
71
+ - lib/chef/knife/chef_client.rb
70
72
  - lib/chef/knife/zero_base.rb
71
73
  - lib/chef/knife/zero_bootstrap.rb
72
74
  - lib/knife-zero/bootstrap_ssh.rb