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,78 @@
1
+ #!/bin/bash
2
+ # Startup script for chef-client
3
+ #
4
+ # chkconfig: - 98 02
5
+ # description: Client component of the Chef systems integration framework.
6
+ # processname: chef-client
7
+ #
8
+ # config: /etc/sysconfig/chef-client
9
+ # pidfile: /var/run/chef/chef-client.pid
10
+
11
+ # Source function library
12
+ . /etc/init.d/functions
13
+
14
+ [ -f /etc/sysconfig/chef-client ] && . /etc/sysconfig/chef-client
15
+
16
+ prog="chef-client"
17
+ pidfile=${PIDFILE-/var/run/chef/client.pid}
18
+ lockfile=${LOCKFILE-/var/lock/subsys/$prog}
19
+ config=${CONFIG-/etc/chef/client.rb}
20
+ user=${USER-root}
21
+ group=${GROUP-root}
22
+ interval=${INTERVAL-1800}
23
+ splay=${SPLAY-20}
24
+ logfile=${LOGFILE-/var/log/chef/client.log}
25
+ options=${OPTIONS-}
26
+
27
+ start() {
28
+ echo -n "Starting $prog:"
29
+ daemon chef-client -d -c "$config" -i "$interval" -s "$splay" -L "$logfile" "$options" "&>/dev/null"
30
+ RETVAL=$?
31
+ echo
32
+ [ $RETVAL -eq 0 ] && touch ${lockfile}
33
+ return $RETVAL
34
+ }
35
+
36
+ stop() {
37
+ echo -n "Stopping $prog: "
38
+ if [ -f $pidfile ]; then
39
+ killproc chef-client
40
+ RETVAL=$?
41
+ if [ $RETVAL -ne 0 ]; then
42
+ failure;
43
+ fi;
44
+ else
45
+ RETVAL=1
46
+ failure;
47
+ fi
48
+ rm -f $lockfile
49
+ echo
50
+ return $RETVAL
51
+ }
52
+
53
+ case "$1" in
54
+ start)
55
+ start
56
+ ;;
57
+ stop)
58
+ stop
59
+ ;;
60
+ restart)
61
+ stop
62
+ start
63
+ ;;
64
+ condrestart)
65
+ if [ -f $lockfile ]; then
66
+ stop
67
+ start
68
+ fi
69
+ ;;
70
+ status)
71
+ status chef-client
72
+ ;;
73
+ *)
74
+ echo "Usage: $0 {start|stop|restart|condrestart|status}"
75
+ exit 1
76
+ esac
77
+
78
+ exit $RETVAL
@@ -0,0 +1,76 @@
1
+ #!/bin/bash
2
+ # Startup script for chef-indexer.
3
+ #
4
+ # chkconfig: - 75 25
5
+ # description: Server component of the Chef systems integration framework.
6
+ # processname: chef-indexer
7
+ #
8
+ # config: /etc/sysconfig/chef-indexer
9
+ # pidfile: /var/run/chef/chef-indexer.pid
10
+
11
+ # Source function library
12
+ . /etc/init.d/functions
13
+
14
+ [ -f /etc/sysconfig/chef-indexer ] && . /etc/sysconfig/chef-indexer
15
+
16
+ prog="chef-indexer"
17
+ pidfile=${PIDFILE-/var/run/chef/indexer.pid}
18
+ lockfile=${LOCKFILE-/var/lock/subsys/$prog}
19
+ config=${CONFIG-/etc/chef/indexer.rb}
20
+ user=${USER-chef}
21
+ group=${GROUP-chef}
22
+ logfile=${LOGFILE-/var/log/chef/indexer.log}
23
+ options=${OPTIONS-}
24
+
25
+ start() {
26
+ echo -n "Starting $prog:"
27
+ daemon chef-indexer -d -c "$config" -u "$user" -g "$group" -L "$logfile" "$options" "&>/dev/null"
28
+ RETVAL=$?
29
+ echo
30
+ [ $RETVAL -eq 0 ] && touch ${lockfile}
31
+ return $RETVAL
32
+ }
33
+
34
+ stop() {
35
+ echo -n "Stopping $prog: "
36
+ if [ -f $pidfile ]; then
37
+ killproc chef-indexer
38
+ RETVAL=$?
39
+ if [ $RETVAL -ne 0 ]; then
40
+ failure;
41
+ fi;
42
+ else
43
+ RETVAL=1
44
+ failure;
45
+ fi
46
+ rm -f $lockfile
47
+ echo
48
+ return $RETVAL
49
+ }
50
+
51
+ case "$1" in
52
+ start)
53
+ start
54
+ ;;
55
+ stop)
56
+ stop
57
+ ;;
58
+ restart)
59
+ stop
60
+ start
61
+ ;;
62
+ condrestart)
63
+ if [ -f $lockfile ]; then
64
+ stop
65
+ start
66
+ fi
67
+ ;;
68
+ status)
69
+ status chef-indexer
70
+ ;;
71
+ *)
72
+ echo "Usage: $0 {start|stop|restart|condrestart|status}"
73
+ exit 1
74
+ esac
75
+
76
+ exit $RETVAL
@@ -0,0 +1,78 @@
1
+ #!/bin/bash
2
+ # Startup script for chef-server
3
+ #
4
+ # chkconfig: - 65 35
5
+ # description: Server component of the Chef systems integration framework.
6
+ # processname: chef-server
7
+ #
8
+ # config: /etc/sysconfig/chef-server
9
+ # pidfile: /var/run/chef/chef-server.pid
10
+
11
+ # Source function library
12
+ . /etc/init.d/functions
13
+
14
+ [ -f /etc/sysconfig/chef-server ] && . /etc/sysconfig/chef-server
15
+
16
+ prog="chef-server"
17
+ childpidfiles=${CHILDPIDFILES-/var/run/chef/server.%s.pid}
18
+ pidfile=${PIDFILE-/var/run/chef/server.main.pid}
19
+ lockfile=${LOCKFILE-/var/lock/subsys/$prog}
20
+ config=${CONFIG-/etc/chef/server.rb}
21
+ user=${USER-chef}
22
+ group=${GROUP-chef}
23
+ cluster_nodes=${CLUSTER_NODES-2}
24
+ logfile=${LOGFILE-/var/log/chef/merb.%s.log}
25
+ options=${OPTIONS-}
26
+
27
+ start() {
28
+ echo -n "Starting $prog:"
29
+ daemon chef-server -d -c "$cluster_nodes" -C "$config" -u "$user" -G "$group" -L "$logfile" -P "$childpidfiles" "$options" "&>/dev/null"
30
+ RETVAL=$?
31
+ echo
32
+ [ $RETVAL -eq 0 ] && touch ${lockfile}
33
+ return $RETVAL
34
+ }
35
+
36
+ stop() {
37
+ echo -n "Stopping $prog: "
38
+ if [ -f $pidfile ]; then
39
+ killproc chef-server
40
+ RETVAL=$?
41
+ if [ $RETVAL -ne 0 ]; then
42
+ failure;
43
+ fi;
44
+ else
45
+ RETVAL=1
46
+ failure;
47
+ fi
48
+ rm -f $lockfile
49
+ echo
50
+ return $RETVAL
51
+ }
52
+
53
+ case "$1" in
54
+ start)
55
+ start
56
+ ;;
57
+ stop)
58
+ stop
59
+ ;;
60
+ restart)
61
+ stop
62
+ start
63
+ ;;
64
+ condrestart)
65
+ if [ -f $lockfile ]; then
66
+ stop
67
+ start
68
+ fi
69
+ ;;
70
+ status)
71
+ status chef-server
72
+ ;;
73
+ *)
74
+ echo "Usage: $0 {start|stop|restart|condrestart|status}"
75
+ exit 1
76
+ esac
77
+
78
+ exit $RETVAL
@@ -0,0 +1,10 @@
1
+ # Configuration file for the chef-client service
2
+
3
+ #PIDFILE=/var/run/chef/client.pid
4
+ #CONFIG=/etc/chef/client.rb
5
+ #USER=root
6
+ #GROUP=root
7
+ #INTERVAL=1800
8
+ #SPLAY=20
9
+ #LOGFILE=/var/log/chef/client.log
10
+ #OPTIONS=
@@ -0,0 +1,8 @@
1
+ # Configuration file for the chef-server service
2
+
3
+ #PIDFILE=/var/run/chef/indexer.pid
4
+ #CONFIG=/etc/chef/indexer.rb
5
+ #USER=chef
6
+ #GROUP=chef
7
+ #LOGFILE=/var/log/chef/indexer.log
8
+ #OPTIONS=
@@ -0,0 +1,10 @@
1
+ # Configuration file for the chef-server service
2
+
3
+ #CHILDPIDFILES=/var/run/chef/server.%s.pid
4
+ #PIDFILE=/var/run/chef/server.pid
5
+ #CONFIG=/etc/chef/server.rb
6
+ #USER=chef
7
+ #GROUP=chef
8
+ #CLUSTER_NODES=2
9
+ #LOGFILE=/var/log/chef/merb.%s.log
10
+ #OPTIONS=
@@ -0,0 +1,121 @@
1
+ #! /bin/sh
2
+ # Copyright (c) 1995-2003 SuSE Linux AG, Nuernberg, Germany.
3
+ # All rights reserved.
4
+ #
5
+ # Author: Mario Giammarco
6
+ #
7
+ ### BEGIN INIT INFO
8
+ # Provides: chef-client
9
+ # Required-Start: $remote_fs $syslog $named
10
+ # Required-Stop: $remote_fs $syslog
11
+ # Default-Start: 3 5
12
+ # Default-Stop: 0 1 2 6
13
+ # Short-Description: Chef client
14
+ # Description: Starts chef client
15
+ ### END INIT INFO
16
+
17
+ # First reset status of this service
18
+ . /etc/rc.status
19
+ rc_reset
20
+
21
+ # Return values acc. to LSB for all commands but status:
22
+ # 0 - success
23
+ # 1 - generic or unspecified error
24
+ # 2 - invalid or excess argument(s)
25
+ # 3 - unimplemented feature (e.g. "reload")
26
+ # 4 - insufficient privilege
27
+ # 5 - program is not installed
28
+ # 6 - program is not configured
29
+ # 7 - program is not running
30
+
31
+ # set default options
32
+ CHEF_CONF="/etc/chef/client.rb"
33
+ if [ ! -f ${CHEF_CONF} ]; then
34
+ echo -n "Chef client configuration file, ${CHEF_CONF} does not exist."
35
+ # Tell the user this has skipped
36
+ rc_status -s
37
+ exit 6
38
+ fi
39
+
40
+ CHEF_BIN="/usr/bin/chef-client"
41
+ if [ ! -x ${CHEF_BIN} ]; then
42
+ echo -n "Chef client, ${CHEF_BIN} not installed!"
43
+ rc_status -s
44
+ exit 5
45
+ fi
46
+
47
+ CHEF_LOGFILE=/var/log/chef/chef-client.log
48
+ CHEF_OPTIONS=""
49
+
50
+ # set default PID variables
51
+ CHEF_PID="/var/run/chef/chef-client.pid"
52
+ CHEF_PID_NOPREFIX="/var/run/chef/chef-client.pid"
53
+
54
+ function chef_is_running() {
55
+ $0 status >/dev/null
56
+ }
57
+
58
+ case "$1" in
59
+ start)
60
+
61
+ echo -n "Starting chef-client"
62
+
63
+ startproc $CHEF_BIN -d -c "$CHEF_CONF" -L "$CHEF_LOGFILE" "$CHEF_OPTIONS" ">/dev/null"
64
+
65
+ rc_status -v
66
+ ;;
67
+ stop)
68
+ echo -n "Shutting down chef client"
69
+ killproc -p ${CHEF_PID} -TERM $CHEF_BIN
70
+ rc_status -v
71
+ rm -f ${CHEF_PID} 2>/dev/null
72
+ ;;
73
+ try-restart)
74
+ $0 status
75
+ if test $? = 0; then
76
+ $0 restart $2
77
+ else
78
+ rc_reset # Not running is not a failure.
79
+ fi
80
+ # Remember status and be quiet
81
+ rc_status
82
+ ;;
83
+ restart)
84
+ $0 stop
85
+ $0 start $2
86
+ rc_status
87
+ ;;
88
+ try-restart-iburst)
89
+ $0 status
90
+ if test $? = 0; then
91
+ $0 stop
92
+ $0 start iburst
93
+ else
94
+ rc_reset # Not running is not a failure.
95
+ fi
96
+ # Remember status and be quiet
97
+ rc_status
98
+ ;;
99
+ force-reload)
100
+ # Does not support signalling to reload
101
+ $0 try-restart
102
+ rc_status
103
+ ;;
104
+ reload)
105
+ echo -n "Reload chef-client"
106
+ # Does not support signalling to reload
107
+ rc_failed 3
108
+ rc_status -v
109
+ ;;
110
+ status)
111
+ checkproc -p ${CHEF_PID} $CHEF_BIN
112
+ echo -n "Checking for chef-client "
113
+ checkproc -p ${CHEF_PID} $CHEF_BIN
114
+ rc_status -v
115
+ ;;
116
+ *)
117
+ echo "Usage: $0 {start|stop|status|try-restart|restart|try-restart-iburst|force-reload|reload|addserver|ntptimeset}"
118
+ exit 1
119
+ ;;
120
+ esac
121
+ rc_exit
@@ -0,0 +1,49 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@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
+
19
+ $:.unshift(File.dirname(__FILE__)) unless
20
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
21
+
22
+ require 'rubygems'
23
+ require 'extlib'
24
+ require 'chef/exceptions'
25
+ require 'chef/log'
26
+ require 'chef/config'
27
+ Dir[File.join(File.dirname(__FILE__), 'chef/mixin/**/*.rb')].sort.each { |lib| require lib }
28
+
29
+ class Chef
30
+ VERSION = '0.8.0.1'
31
+ end
32
+
33
+ # Adds a Dir.glob to Ruby 1.8.5, for compat
34
+ if RUBY_VERSION < "1.8.6"
35
+ class Dir
36
+ class << self
37
+ alias_method :glob_, :glob
38
+ def glob(pattern, flags=0)
39
+ raise ArgumentError unless (
40
+ !pattern.nil? and (
41
+ pattern.is_a? Array and !pattern.empty?
42
+ ) or pattern.is_a? String
43
+ )
44
+ [pattern].flatten.inject([]) { |r, p| r + glob_(p, flags) }
45
+ end
46
+ alias_method :[], :glob
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,269 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Nuo Yan (<nuo@opscode.com>)
4
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require 'chef/config'
21
+ require 'chef/mixin/params_validate'
22
+ require 'chef/couchdb'
23
+ require 'chef/certificate'
24
+ require 'extlib'
25
+ require 'json'
26
+
27
+ class Chef
28
+ class ApiClient
29
+
30
+ include Chef::Mixin::FromFile
31
+ include Chef::Mixin::ParamsValidate
32
+
33
+ DESIGN_DOCUMENT = {
34
+ "version" => 1,
35
+ "language" => "javascript",
36
+ "views" => {
37
+ "all" => {
38
+ "map" => <<-EOJS
39
+ function(doc) {
40
+ if (doc.chef_type == "client") {
41
+ emit(doc.name, doc);
42
+ }
43
+ }
44
+ EOJS
45
+ },
46
+ "all_id" => {
47
+ "map" => <<-EOJS
48
+ function(doc) {
49
+ if (doc.chef_type == "client") {
50
+ emit(doc.name, doc.name);
51
+ }
52
+ }
53
+ EOJS
54
+ }
55
+ }
56
+ }
57
+
58
+ attr_accessor :couchdb_rev, :couchdb_id
59
+
60
+ # Create a new Chef::ApiClient object.
61
+ def initialize
62
+ @name = ''
63
+ @public_key = nil
64
+ @private_key = nil
65
+ @couchdb_rev = nil
66
+ @couchdb_id = nil
67
+ @admin = false
68
+ @couchdb = Chef::CouchDB.new
69
+ end
70
+
71
+ # Gets or sets the client name.
72
+ #
73
+ # @params [Optional String] The name must be alpha-numeric plus - and _.
74
+ # @return [String] The current value of the name.
75
+ def name(arg=nil)
76
+ set_or_return(
77
+ :name,
78
+ arg,
79
+ :regex => /^[\-[:alnum:]_\.]+$/
80
+ )
81
+ end
82
+
83
+ # Gets or sets whether this client is an admin.
84
+ #
85
+ # @params [Optional True/False] Should be true or false - default is false.
86
+ # @return [True/False] The current value
87
+ def admin(arg=nil)
88
+ set_or_return(
89
+ :admin,
90
+ arg,
91
+ :kind_of => [ TrueClass, FalseClass ]
92
+ )
93
+ end
94
+
95
+ # Gets or sets the public key.
96
+ #
97
+ # @params [Optional String] The string representation of the public key.
98
+ # @return [String] The current value.
99
+ def public_key(arg=nil)
100
+ set_or_return(
101
+ :public_key,
102
+ arg,
103
+ :kind_of => String
104
+ )
105
+ end
106
+
107
+ # Gets or sets the private key.
108
+ #
109
+ # @params [Optional String] The string representation of the private key.
110
+ # @return [String] The current value.
111
+ def private_key(arg=nil)
112
+ set_or_return(
113
+ :private_key,
114
+ arg,
115
+ :kind_of => String
116
+ )
117
+ end
118
+
119
+ # Creates a new public/private key pair, and populates the public_key and
120
+ # private_key attributes.
121
+ #
122
+ # @return [True]
123
+ def create_keys
124
+ results = Chef::Certificate.gen_keypair(self.name)
125
+ self.public_key(results[0].to_s)
126
+ self.private_key(results[1].to_s)
127
+ true
128
+ end
129
+
130
+ # The hash representation of the object. Includes the name and public_key,
131
+ # but never the private key.
132
+ #
133
+ # @return [Hash]
134
+ def to_hash
135
+ result = {
136
+ "name" => @name,
137
+ "public_key" => @public_key,
138
+ "admin" => @admin,
139
+ 'json_class' => self.class.name,
140
+ "chef_type" => "client"
141
+ }
142
+ result["_rev"] = @couchdb_rev if @couchdb_rev
143
+ result
144
+ end
145
+
146
+ # The JSON representation of the object.
147
+ #
148
+ # @return [String] the JSON string.
149
+ def to_json(*a)
150
+ to_hash.to_json(*a)
151
+ end
152
+
153
+ def self.json_create(o)
154
+ client = Chef::ApiClient.new
155
+ client.name(o["name"])
156
+ client.public_key(o["public_key"])
157
+ client.admin(o["admin"])
158
+ client.couchdb_rev = o["_rev"] if o.has_key?("_rev")
159
+ client.couchdb_id = o["_id"] if o.has_key?("_id")
160
+ client
161
+ end
162
+
163
+ # List all the Chef::ApiClient objects in the CouchDB. If inflate is set
164
+ # to true, you will get the full list of all ApiClients, fully inflated.
165
+ def self.cdb_list(inflate=false)
166
+ couchdb = Chef::CouchDB.new
167
+ rs = couchdb.list("clients", inflate)
168
+ if inflate
169
+ rs["rows"].collect { |r| r["value"] }
170
+ else
171
+ rs["rows"].collect { |r| r["key"] }
172
+ end
173
+ end
174
+
175
+ def self.list(inflate=false)
176
+ r = Chef::REST.new(Chef::Config[:chef_server_url])
177
+ if inflate
178
+ response = Hash.new
179
+ Chef::Search::Query.new.search(:client) do |n|
180
+ response[n.name] = n
181
+ end
182
+ response
183
+ else
184
+ r.get_rest("clients")
185
+ end
186
+ end
187
+
188
+ # Load a client by name from CouchDB
189
+ #
190
+ # @params [String] The name of the client to load
191
+ # @return [Chef::ApiClient] The resulting Chef::ApiClient object
192
+ def self.cdb_load(name)
193
+ couchdb = Chef::CouchDB.new
194
+ couchdb.load("client", name)
195
+ end
196
+
197
+ # Load a client by name via the API
198
+ def self.load(name)
199
+ r = Chef::REST.new(Chef::Config[:chef_server_url])
200
+ response = r.get_rest("clients/#{name}")
201
+ if response.kind_of?(Chef::ApiClient)
202
+ response
203
+ else
204
+ client = Chef::ApiClient.new
205
+ client.name(response['clientname'])
206
+ client
207
+ end
208
+ end
209
+
210
+ # Remove this client from the CouchDB
211
+ #
212
+ # @params [String] The name of the client to delete
213
+ # @return [Chef::ApiClient] The last version of the object
214
+ def cdb_destroy
215
+ @couchdb.delete("client", @name, @couchdb_rev)
216
+ end
217
+
218
+ # Remove this client via the REST API
219
+ def destroy
220
+ r = Chef::REST.new(Chef::Config[:chef_server_url])
221
+ r.delete_rest("clients/#{@name}")
222
+ end
223
+
224
+ # Save this client to the CouchDB
225
+ def cdb_save
226
+ results = @couchdb.store("client", @name, self)
227
+ @couchdb_rev = results["rev"]
228
+ end
229
+
230
+ # Save this client via the REST API, returns a hash including the private key
231
+ def save(new_key=false, validation=false)
232
+ if validation
233
+ r = Chef::REST.new(Chef::Config[:chef_server_url], Chef::Config[:validation_client_name], Chef::Config[:validation_key])
234
+ else
235
+ r = Chef::REST.new(Chef::Config[:chef_server_url])
236
+ end
237
+ # First, try and create a new registration
238
+ begin
239
+ r.post_rest("clients", {:name => self.name, :admin => self.admin })
240
+ rescue Net::HTTPServerException => e
241
+ # If that fails, go ahead and try and update it
242
+ if e.response.code == "403"
243
+ r.put_rest("clients/#{name}", { :name => self.name, :admin => self.admin, :private_key => new_key })
244
+ else
245
+ raise e
246
+ end
247
+ end
248
+ end
249
+
250
+ # Create the client via the REST API
251
+ def create
252
+ r = Chef::REST.new(Chef::Config[:chef_server_url])
253
+ r.post_rest("clients", self)
254
+ end
255
+
256
+ # Set up our CouchDB design document
257
+ def self.create_design_document
258
+ couchdb = Chef::CouchDB.new
259
+ couchdb.create_design_document("clients", DESIGN_DOCUMENT)
260
+ end
261
+
262
+ # As a string
263
+ def to_s
264
+ "client[#{@name}]"
265
+ end
266
+
267
+ end
268
+ end
269
+