runa-chef 0.8.0.1

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.
Files changed (216) hide show
  1. data/LICENSE +201 -0
  2. data/README.rdoc +136 -0
  3. data/bin/chef-client +26 -0
  4. data/bin/chef-solo +26 -0
  5. data/bin/knife +27 -0
  6. data/bin/shef +45 -0
  7. data/distro/README +2 -0
  8. data/distro/common/man/man1/chef-indexer.1 +42 -0
  9. data/distro/common/man/man1/chef-server.1 +108 -0
  10. data/distro/common/man/man8/chef-client.8 +61 -0
  11. data/distro/common/man/man8/chef-solo.8 +58 -0
  12. data/distro/common/man/man8/knife.8 +359 -0
  13. data/distro/debian/etc/init.d/chef-client +175 -0
  14. data/distro/debian/etc/init.d/chef-indexer +175 -0
  15. data/distro/debian/etc/init.d/chef-server +120 -0
  16. data/distro/redhat/etc/init.d/chef-client +78 -0
  17. data/distro/redhat/etc/init.d/chef-indexer +76 -0
  18. data/distro/redhat/etc/init.d/chef-server +78 -0
  19. data/distro/redhat/etc/sysconfig/chef-client +10 -0
  20. data/distro/redhat/etc/sysconfig/chef-indexer +8 -0
  21. data/distro/redhat/etc/sysconfig/chef-server +10 -0
  22. data/distro/suse/etc/init.d/chef-client +121 -0
  23. data/lib/chef.rb +49 -0
  24. data/lib/chef/api_client.rb +269 -0
  25. data/lib/chef/application.rb +98 -0
  26. data/lib/chef/application/agent.rb +18 -0
  27. data/lib/chef/application/client.rb +214 -0
  28. data/lib/chef/application/knife.rb +138 -0
  29. data/lib/chef/application/server.rb +19 -0
  30. data/lib/chef/application/solo.rb +214 -0
  31. data/lib/chef/cache.rb +61 -0
  32. data/lib/chef/cache/checksum.rb +70 -0
  33. data/lib/chef/certificate.rb +154 -0
  34. data/lib/chef/client.rb +323 -0
  35. data/lib/chef/compile.rb +158 -0
  36. data/lib/chef/config.rb +195 -0
  37. data/lib/chef/cookbook.rb +198 -0
  38. data/lib/chef/cookbook/metadata.rb +487 -0
  39. data/lib/chef/cookbook/metadata/version.rb +87 -0
  40. data/lib/chef/cookbook_loader.rb +180 -0
  41. data/lib/chef/couchdb.rb +273 -0
  42. data/lib/chef/daemon.rb +170 -0
  43. data/lib/chef/data_bag.rb +216 -0
  44. data/lib/chef/data_bag_item.rb +227 -0
  45. data/lib/chef/exceptions.rb +39 -0
  46. data/lib/chef/file_cache.rb +205 -0
  47. data/lib/chef/knife.rb +300 -0
  48. data/lib/chef/knife/client_bulk_delete.rb +41 -0
  49. data/lib/chef/knife/client_create.rb +55 -0
  50. data/lib/chef/knife/client_delete.rb +37 -0
  51. data/lib/chef/knife/client_edit.rb +37 -0
  52. data/lib/chef/knife/client_list.rb +40 -0
  53. data/lib/chef/knife/client_reregister.rb +48 -0
  54. data/lib/chef/knife/client_show.rb +42 -0
  55. data/lib/chef/knife/configure.rb +84 -0
  56. data/lib/chef/knife/cookbook_bulk_delete.rb +47 -0
  57. data/lib/chef/knife/cookbook_delete.rb +41 -0
  58. data/lib/chef/knife/cookbook_download.rb +57 -0
  59. data/lib/chef/knife/cookbook_list.rb +41 -0
  60. data/lib/chef/knife/cookbook_metadata.rb +87 -0
  61. data/lib/chef/knife/cookbook_show.rb +75 -0
  62. data/lib/chef/knife/cookbook_upload.rb +173 -0
  63. data/lib/chef/knife/data_bag_create.rb +43 -0
  64. data/lib/chef/knife/data_bag_delete.rb +43 -0
  65. data/lib/chef/knife/data_bag_edit.rb +49 -0
  66. data/lib/chef/knife/data_bag_list.rb +42 -0
  67. data/lib/chef/knife/data_bag_show.rb +40 -0
  68. data/lib/chef/knife/ec2_instance_data.rb +46 -0
  69. data/lib/chef/knife/node_bulk_delete.rb +44 -0
  70. data/lib/chef/knife/node_create.rb +39 -0
  71. data/lib/chef/knife/node_delete.rb +36 -0
  72. data/lib/chef/knife/node_edit.rb +36 -0
  73. data/lib/chef/knife/node_from_file.rb +42 -0
  74. data/lib/chef/knife/node_list.rb +41 -0
  75. data/lib/chef/knife/node_run_list_add.rb +64 -0
  76. data/lib/chef/knife/node_run_list_remove.rb +45 -0
  77. data/lib/chef/knife/node_show.rb +46 -0
  78. data/lib/chef/knife/role_bulk_delete.rb +45 -0
  79. data/lib/chef/knife/role_create.rb +44 -0
  80. data/lib/chef/knife/role_delete.rb +36 -0
  81. data/lib/chef/knife/role_edit.rb +37 -0
  82. data/lib/chef/knife/role_from_file.rb +46 -0
  83. data/lib/chef/knife/role_list.rb +40 -0
  84. data/lib/chef/knife/role_show.rb +43 -0
  85. data/lib/chef/knife/search.rb +94 -0
  86. data/lib/chef/log.rb +39 -0
  87. data/lib/chef/mixin/check_helper.rb +31 -0
  88. data/lib/chef/mixin/checksum.rb +32 -0
  89. data/lib/chef/mixin/command.rb +390 -0
  90. data/lib/chef/mixin/convert_to_class_name.rb +57 -0
  91. data/lib/chef/mixin/create_path.rb +56 -0
  92. data/lib/chef/mixin/deep_merge.rb +33 -0
  93. data/lib/chef/mixin/find_preferred_file.rb +92 -0
  94. data/lib/chef/mixin/from_file.rb +50 -0
  95. data/lib/chef/mixin/generate_url.rb +58 -0
  96. data/lib/chef/mixin/language.rb +107 -0
  97. data/lib/chef/mixin/language_include_attribute.rb +56 -0
  98. data/lib/chef/mixin/language_include_recipe.rb +53 -0
  99. data/lib/chef/mixin/params_validate.rb +197 -0
  100. data/lib/chef/mixin/recipe_definition_dsl_core.rb +79 -0
  101. data/lib/chef/mixin/template.rb +94 -0
  102. data/lib/chef/nanite.rb +100 -0
  103. data/lib/chef/node.rb +463 -0
  104. data/lib/chef/node/attribute.rb +412 -0
  105. data/lib/chef/openid_registration.rb +181 -0
  106. data/lib/chef/platform.rb +268 -0
  107. data/lib/chef/provider.rb +101 -0
  108. data/lib/chef/provider/breakpoint.rb +36 -0
  109. data/lib/chef/provider/cron.rb +184 -0
  110. data/lib/chef/provider/deploy.rb +314 -0
  111. data/lib/chef/provider/deploy/revision.rb +70 -0
  112. data/lib/chef/provider/deploy/timestamped.rb +33 -0
  113. data/lib/chef/provider/directory.rb +72 -0
  114. data/lib/chef/provider/erl_call.rb +72 -0
  115. data/lib/chef/provider/execute.rb +58 -0
  116. data/lib/chef/provider/file.rb +195 -0
  117. data/lib/chef/provider/git.rb +203 -0
  118. data/lib/chef/provider/group.rb +120 -0
  119. data/lib/chef/provider/group/dscl.rb +128 -0
  120. data/lib/chef/provider/group/gpasswd.rb +50 -0
  121. data/lib/chef/provider/group/groupadd.rb +78 -0
  122. data/lib/chef/provider/group/pw.rb +88 -0
  123. data/lib/chef/provider/group/usermod.rb +57 -0
  124. data/lib/chef/provider/http_request.rb +106 -0
  125. data/lib/chef/provider/ifconfig.rb +131 -0
  126. data/lib/chef/provider/link.rb +157 -0
  127. data/lib/chef/provider/mdadm.rb +88 -0
  128. data/lib/chef/provider/mount.rb +117 -0
  129. data/lib/chef/provider/mount/mount.rb +208 -0
  130. data/lib/chef/provider/package.rb +160 -0
  131. data/lib/chef/provider/package/apt.rb +110 -0
  132. data/lib/chef/provider/package/dpkg.rb +109 -0
  133. data/lib/chef/provider/package/easy_install.rb +106 -0
  134. data/lib/chef/provider/package/freebsd.rb +153 -0
  135. data/lib/chef/provider/package/macports.rb +105 -0
  136. data/lib/chef/provider/package/portage.rb +124 -0
  137. data/lib/chef/provider/package/rpm.rb +99 -0
  138. data/lib/chef/provider/package/rubygems.rb +136 -0
  139. data/lib/chef/provider/package/yum-dump.py +125 -0
  140. data/lib/chef/provider/package/yum.rb +175 -0
  141. data/lib/chef/provider/package/zypper.rb +132 -0
  142. data/lib/chef/provider/remote_directory.rb +126 -0
  143. data/lib/chef/provider/remote_file.rb +141 -0
  144. data/lib/chef/provider/route.rb +118 -0
  145. data/lib/chef/provider/ruby_block.rb +33 -0
  146. data/lib/chef/provider/script.rb +42 -0
  147. data/lib/chef/provider/service.rb +135 -0
  148. data/lib/chef/provider/service/debian.rb +64 -0
  149. data/lib/chef/provider/service/freebsd.rb +156 -0
  150. data/lib/chef/provider/service/gentoo.rb +54 -0
  151. data/lib/chef/provider/service/init.rb +71 -0
  152. data/lib/chef/provider/service/redhat.rb +62 -0
  153. data/lib/chef/provider/service/simple.rb +114 -0
  154. data/lib/chef/provider/subversion.rb +156 -0
  155. data/lib/chef/provider/template.rb +175 -0
  156. data/lib/chef/provider/user.rb +170 -0
  157. data/lib/chef/provider/user/dscl.rb +280 -0
  158. data/lib/chef/provider/user/pw.rb +113 -0
  159. data/lib/chef/provider/user/useradd.rb +108 -0
  160. data/lib/chef/recipe.rb +105 -0
  161. data/lib/chef/resource.rb +380 -0
  162. data/lib/chef/resource/apt_package.rb +34 -0
  163. data/lib/chef/resource/bash.rb +33 -0
  164. data/lib/chef/resource/breakpoint.rb +35 -0
  165. data/lib/chef/resource/cron.rb +179 -0
  166. data/lib/chef/resource/csh.rb +33 -0
  167. data/lib/chef/resource/deploy.rb +359 -0
  168. data/lib/chef/resource/deploy_revision.rb +35 -0
  169. data/lib/chef/resource/directory.rb +76 -0
  170. data/lib/chef/resource/dpkg_package.rb +34 -0
  171. data/lib/chef/resource/easy_install_package.rb +41 -0
  172. data/lib/chef/resource/erl_call.rb +83 -0
  173. data/lib/chef/resource/execute.rb +127 -0
  174. data/lib/chef/resource/file.rb +84 -0
  175. data/lib/chef/resource/gem_package.rb +41 -0
  176. data/lib/chef/resource/git.rb +36 -0
  177. data/lib/chef/resource/group.rb +70 -0
  178. data/lib/chef/resource/http_request.rb +52 -0
  179. data/lib/chef/resource/ifconfig.rb +134 -0
  180. data/lib/chef/resource/link.rb +78 -0
  181. data/lib/chef/resource/macports_package.rb +29 -0
  182. data/lib/chef/resource/mdadm.rb +82 -0
  183. data/lib/chef/resource/mount.rb +135 -0
  184. data/lib/chef/resource/package.rb +80 -0
  185. data/lib/chef/resource/perl.rb +33 -0
  186. data/lib/chef/resource/portage_package.rb +33 -0
  187. data/lib/chef/resource/python.rb +33 -0
  188. data/lib/chef/resource/remote_directory.rb +91 -0
  189. data/lib/chef/resource/remote_file.rb +60 -0
  190. data/lib/chef/resource/route.rb +135 -0
  191. data/lib/chef/resource/ruby.rb +33 -0
  192. data/lib/chef/resource/ruby_block.rb +39 -0
  193. data/lib/chef/resource/scm.rb +137 -0
  194. data/lib/chef/resource/script.rb +51 -0
  195. data/lib/chef/resource/service.rb +134 -0
  196. data/lib/chef/resource/subversion.rb +34 -0
  197. data/lib/chef/resource/template.rb +60 -0
  198. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  199. data/lib/chef/resource/user.rb +101 -0
  200. data/lib/chef/resource_collection.rb +212 -0
  201. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  202. data/lib/chef/resource_definition.rb +67 -0
  203. data/lib/chef/rest.rb +298 -0
  204. data/lib/chef/role.rb +301 -0
  205. data/lib/chef/run_list.rb +164 -0
  206. data/lib/chef/runner.rb +130 -0
  207. data/lib/chef/search/query.rb +71 -0
  208. data/lib/chef/shef.rb +220 -0
  209. data/lib/chef/shef/ext.rb +297 -0
  210. data/lib/chef/shef/shef_session.rb +175 -0
  211. data/lib/chef/streaming_cookbook_uploader.rb +185 -0
  212. data/lib/chef/tasks/chef_repo.rake +245 -0
  213. data/lib/chef/util/file_edit.rb +125 -0
  214. data/lib/chef/util/fileedit.rb +121 -0
  215. data/lib/chef/webui_user.rb +231 -0
  216. metadata +398 -0
@@ -0,0 +1,98 @@
1
+ #
2
+ # Author:: AJ Christensen (<aj@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require 'chef/config'
19
+ require 'chef/exceptions'
20
+ require 'chef/log'
21
+ require 'mixlib/cli'
22
+
23
+ class Chef::Application
24
+ include Mixlib::CLI
25
+
26
+ def initialize
27
+ super
28
+
29
+ trap("TERM") do
30
+ Chef::Application.fatal!("SIGTERM received, stopping", 1)
31
+ end
32
+
33
+ trap("INT") do
34
+ Chef::Application.fatal!("SIGINT received, stopping", 2)
35
+ end
36
+
37
+ trap("HUP") do
38
+ Chef::Log.info("SIGHUP received, reconfiguring")
39
+ reconfigure
40
+ end
41
+
42
+ at_exit do
43
+ # tear down the logger
44
+ end
45
+ end
46
+
47
+ # Reconfigure the application. You'll want to override and super this method.
48
+ def reconfigure
49
+ configure_chef
50
+ configure_logging
51
+ end
52
+
53
+ # Get this party started
54
+ def run
55
+ reconfigure
56
+ setup_application
57
+ run_application
58
+ end
59
+
60
+ # Parse the configuration file
61
+ def configure_chef
62
+ parse_options
63
+
64
+ Chef::Config.from_file(config[:config_file]) if !config[:config_file].nil? && File.exists?(config[:config_file]) && File.readable?(config[:config_file])
65
+ Chef::Config.merge!(config)
66
+ end
67
+
68
+ # Initialize and configure the logger
69
+ def configure_logging
70
+ Chef::Log.init(Chef::Config[:log_location])
71
+ Chef::Log.level = Chef::Config[:log_level]
72
+ end
73
+
74
+ # Called prior to starting the application, by the run method
75
+ def setup_application
76
+ raise Chef::Exceptions::Application, "#{self.to_s}: you must override setup_application"
77
+ end
78
+
79
+ # Actually run the application
80
+ def run_application
81
+ raise Chef::Exceptions::Application, "#{self.to_s}: you must override run_application"
82
+ end
83
+
84
+ class << self
85
+ # Log a fatal error message to both STDERR and the Logger, exit the application
86
+ def fatal!(msg, err = -1)
87
+ STDERR.puts("FATAL: #{msg}")
88
+ Chef::Log.fatal(msg)
89
+ Process.exit err
90
+ end
91
+
92
+ def exit!(msg, err = -1)
93
+ Chef::Log.debug(msg)
94
+ Process.exit err
95
+ end
96
+ end
97
+
98
+ end
@@ -0,0 +1,18 @@
1
+ #
2
+ # Author:: AJ Christensen (<aj@opscode.comz>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require 'chef/application'
@@ -0,0 +1,214 @@
1
+ #
2
+ # Author:: AJ Christensen (<aj@opscode.com)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require 'chef/application'
19
+ require 'chef/client'
20
+ require 'chef/config'
21
+ require 'chef/daemon'
22
+ require 'chef/log'
23
+ require 'net/http'
24
+ require 'open-uri'
25
+
26
+
27
+ class Chef::Application::Client < Chef::Application
28
+
29
+ option :config_file,
30
+ :short => "-c CONFIG",
31
+ :long => "--config CONFIG",
32
+ :default => "/etc/chef/client.rb",
33
+ :description => "The configuration file to use"
34
+
35
+ option :log_level,
36
+ :short => "-l LEVEL",
37
+ :long => "--log_level LEVEL",
38
+ :description => "Set the log level (debug, info, warn, error, fatal)",
39
+ :proc => lambda { |l| l.to_sym }
40
+
41
+ option :log_location,
42
+ :short => "-L LOGLOCATION",
43
+ :long => "--logfile LOGLOCATION",
44
+ :description => "Set the log file location, defaults to STDOUT - recommended for daemonizing",
45
+ :proc => nil
46
+
47
+ option :help,
48
+ :short => "-h",
49
+ :long => "--help",
50
+ :description => "Show this message",
51
+ :on => :tail,
52
+ :boolean => true,
53
+ :show_options => true,
54
+ :exit => 0
55
+
56
+ option :user,
57
+ :short => "-u USER",
58
+ :long => "--user USER",
59
+ :description => "User to set privilege to",
60
+ :proc => nil
61
+
62
+ option :group,
63
+ :short => "-g GROUP",
64
+ :long => "--group GROUP",
65
+ :description => "Group to set privilege to",
66
+ :proc => nil
67
+
68
+ option :daemonize,
69
+ :short => "-d",
70
+ :long => "--daemonize",
71
+ :description => "Daemonize the process",
72
+ :proc => lambda { |p| true }
73
+
74
+ option :interval,
75
+ :short => "-i SECONDS",
76
+ :long => "--interval SECONDS",
77
+ :description => "Run chef-client periodically, in seconds",
78
+ :proc => lambda { |s| s.to_i }
79
+
80
+ option :json_attribs,
81
+ :short => "-j JSON_ATTRIBS",
82
+ :long => "--json-attributes JSON_ATTRIBS",
83
+ :description => "Load attributes from a JSON file or URL",
84
+ :proc => nil
85
+
86
+ option :node_name,
87
+ :short => "-N NODE_NAME",
88
+ :long => "--node-name NODE_NAME",
89
+ :description => "The node name for this client",
90
+ :proc => nil
91
+
92
+ option :splay,
93
+ :short => "-s SECONDS",
94
+ :long => "--splay SECONDS",
95
+ :description => "The splay time for running at intervals, in seconds",
96
+ :proc => lambda { |s| s.to_i }
97
+
98
+ option :chef_server_url,
99
+ :short => "-S CHEFSERVERURL",
100
+ :long => "--server CHEFSERVERURL",
101
+ :description => "The chef server URL",
102
+ :proc => nil
103
+
104
+ option :validation_token,
105
+ :short => "-t TOKEN",
106
+ :long => "--token TOKEN",
107
+ :description => "Set the openid validation token",
108
+ :proc => nil
109
+
110
+ option :version,
111
+ :short => "-v",
112
+ :long => "--version",
113
+ :description => "Show chef version",
114
+ :boolean => true,
115
+ :proc => lambda {|v| puts "Chef: #{::Chef::VERSION}"},
116
+ :exit => 0
117
+
118
+ def initialize
119
+ super
120
+
121
+ @chef_client = nil
122
+ @chef_client_json = nil
123
+ end
124
+
125
+ # Reconfigure the chef client
126
+ # Re-open the JSON attributes and load them into the node
127
+ def reconfigure
128
+ super
129
+
130
+ Chef::Config[:chef_server_url] = config[:chef_server_url] if config.has_key? :chef_server_url
131
+
132
+ if Chef::Config[:daemonize]
133
+ Chef::Config[:interval] ||= 1800
134
+ end
135
+
136
+ if Chef::Config[:json_attribs]
137
+ begin
138
+ json_io = open(Chef::Config[:json_attribs])
139
+ rescue SocketError => error
140
+ Chef::Application.fatal!("I cannot connect to #{Chef::Config[:json_attribs]}", 2)
141
+ rescue Errno::ENOENT => error
142
+ Chef::Application.fatal!("I cannot find #{Chef::Config[:json_attribs]}", 2)
143
+ rescue Errno::EACCES => error
144
+ Chef::Application.fatal!("Permissions are incorrect on #{Chef::Config[:json_attribs]}. Please chmod a+r #{Chef::Config[:json_attribs]}", 2)
145
+ rescue Exception => error
146
+ Chef::Application.fatal!("Got an unexpected error reading #{Chef::Config[:json_attribs]}: #{error.message}", 2)
147
+ end
148
+
149
+ begin
150
+ @chef_client_json = JSON.parse(json_io.read)
151
+ rescue JSON::ParserError => error
152
+ Chef::Application.fatal!("Could not parse the provided JSON file (#{Chef::Config[:json_attribs]})!: " + error.message, 2)
153
+ end
154
+ end
155
+ end
156
+
157
+ def configure_logging
158
+ super
159
+ Mixlib::Authentication::Log.logger = Chef::Log.logger
160
+ end
161
+
162
+ # Setup an instance of the chef client
163
+ # Why is this so ugly? surely the client should just read out of chef::config instead of needing the values to be assigned like this..
164
+ def setup_application
165
+ Chef::Daemon.change_privilege
166
+
167
+ @chef_client = Chef::Client.new
168
+ @chef_client.json_attribs = @chef_client_json
169
+ @chef_client.validation_token = Chef::Config[:validation_token]
170
+ @chef_client.node_name = Chef::Config[:node_name]
171
+ end
172
+
173
+ # Run the chef client, optionally daemonizing or looping at intervals.
174
+ def run_application
175
+ if Chef::Config[:version]
176
+ puts "Chef version: #{::Chef::VERSION}"
177
+ end
178
+
179
+ if Chef::Config[:daemonize]
180
+ Chef::Daemon.daemonize("chef-client")
181
+ end
182
+
183
+ loop do
184
+ begin
185
+ if Chef::Config[:splay]
186
+ splay = rand Chef::Config[:splay]
187
+ Chef::Log.debug("Splay sleep #{splay} seconds")
188
+ sleep splay
189
+ end
190
+
191
+ @chef_client.run
192
+
193
+ if Chef::Config[:interval]
194
+ Chef::Log.debug("Sleeping for #{Chef::Config[:interval]} seconds")
195
+ sleep Chef::Config[:interval]
196
+ else
197
+ Chef::Application.exit! "Exiting", 0
198
+ end
199
+ rescue SystemExit => e
200
+ raise
201
+ rescue Exception => e
202
+ if Chef::Config[:interval]
203
+ Chef::Log.error("#{e.class}")
204
+ Chef::Log.fatal("#{e}\n#{e.backtrace.join("\n")}")
205
+ Chef::Log.fatal("Sleeping for #{Chef::Config[:interval]} seconds before trying again")
206
+ sleep Chef::Config[:interval]
207
+ retry
208
+ else
209
+ raise
210
+ end
211
+ end
212
+ end
213
+ end
214
+ end
@@ -0,0 +1,138 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com)
3
+ # Copyright:: Copyright (c) 2009 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require 'chef/knife'
19
+ require 'chef/application'
20
+ require 'chef/client'
21
+ require 'chef/config'
22
+ require 'chef/log'
23
+ require 'chef/node'
24
+ require 'chef/role'
25
+ require 'chef/data_bag'
26
+ require 'chef/data_bag_item'
27
+ require 'chef/rest'
28
+ require 'chef/search/query'
29
+ require 'tmpdir'
30
+ require 'uri'
31
+
32
+ class Chef::Application::Knife < Chef::Application
33
+
34
+ banner "Usage: #{$0} sub-command (options)"
35
+
36
+ option :config_file,
37
+ :short => "-c CONFIG",
38
+ :long => "--config CONFIG",
39
+ :default => File.join(ENV['HOME'], '.chef', 'knife.rb'),
40
+ :description => "The configuration file to use"
41
+
42
+ option :log_level,
43
+ :short => "-l LEVEL",
44
+ :long => "--log_level LEVEL",
45
+ :description => "Set the log level (debug, info, warn, error, fatal)",
46
+ :proc => lambda { |l| l.to_sym }
47
+
48
+ option :log_location,
49
+ :short => "-L LOGLOCATION",
50
+ :long => "--logfile LOGLOCATION",
51
+ :description => "Set the log file location, defaults to STDOUT",
52
+ :proc => nil
53
+
54
+ option :editor,
55
+ :short => "-e EDITOR",
56
+ :long => "--editor EDITOR",
57
+ :description => "Set the editor to use for interactive commands",
58
+ :default => ENV['EDITOR']
59
+
60
+ option :help,
61
+ :short => "-h",
62
+ :long => "--help",
63
+ :description => "Show this message",
64
+ :on => :tail,
65
+ :boolean => true
66
+
67
+ option :node_name,
68
+ :short => "-u USER",
69
+ :long => "--user USER",
70
+ :description => "API Client Username"
71
+
72
+ option :client_key,
73
+ :short => "-k KEY",
74
+ :long => "--key KEY",
75
+ :description => "API Client Key"
76
+
77
+ option :chef_server_url,
78
+ :short => "-s URL",
79
+ :long => "--server-url URL",
80
+ :description => "Chef Server URL"
81
+
82
+ option :yes,
83
+ :short => "-y",
84
+ :long => "--yes",
85
+ :description => "Say yes to all prompts for confirmation"
86
+
87
+ option :print_after,
88
+ :short => "-p",
89
+ :long => "--print-after",
90
+ :description => "Show the data after a destructive operation"
91
+
92
+ option :version,
93
+ :short => "-v",
94
+ :long => "--version",
95
+ :description => "Show chef version",
96
+ :boolean => true,
97
+ :proc => lambda {|v| puts "Chef: #{::Chef::VERSION}"},
98
+ :exit => 0
99
+
100
+ # Run knife
101
+ def run
102
+ validate_and_parse_options
103
+ knife = Chef::Knife.find_command(ARGV, self.class.options)
104
+ knife.run
105
+ end
106
+
107
+ private
108
+
109
+ def validate_and_parse_options
110
+ # Checking ARGV validity *before* parse_options because parse_options
111
+ # mangles ARGV in some situations
112
+ print_help_and_exit(2, "Sorry, you need to pass a sub-command first!") if no_subcommand_given?
113
+ print_help_and_exit if no_command_given?
114
+ end
115
+
116
+ def no_subcommand_given?
117
+ ARGV[0] =~ /^-/
118
+ end
119
+
120
+ def no_command_given?
121
+ ARGV.empty?
122
+ end
123
+
124
+ def print_help_and_exit(exitcode=1, fatal_message=nil)
125
+ Chef::Log.fatal(fatal_message) if fatal_message
126
+
127
+ begin
128
+ self.parse_options
129
+ rescue OptionParser::InvalidOption => e
130
+ puts "#{e}\n"
131
+ end
132
+ puts self.opt_parser
133
+ puts
134
+ Chef::Knife.list_commands
135
+ exit exitcode
136
+ end
137
+
138
+ end