diff --git a/chef/README.md b/chef/README.md index 36482206f..32c8c3b0e 100644 --- a/chef/README.md +++ b/chef/README.md @@ -1,7 +1,7 @@ BOOTSTRAP CHANGES ================= -The `bootstrap` cookbook's recipes for configuring a RubyGem installation of Chef have been merged into this cookbook. +The `bootstrap` cookbook's recipes for configuring a RubyGem installation of Chef have been merged into this cookbook. Do not use the `bootstrap` cookbook on versions of Chef after 0.8.2. bootstrap::client -> chef::bootstrap_client bootstrap::server -> chef::bootstrap_server @@ -13,6 +13,8 @@ Be aware of the following changes to this cookbook. * We now set the signing key/cert locations and set owner / group. See the server.rb.erb template. * The validation client name is configurable. See the attributes. +The client service setup has been moved from the `chef::bootstrap_client` recipe into its own recipe, `chef::client_service`. This is to improve use with Knife bootstrap which already configures the client configuration file. + DESCRIPTION =========== @@ -30,7 +32,7 @@ Platform If using this cookbook to manage a Chef Server system that was installed from Debian/Ubuntu packages, note that in the packages, the configuration files are split up for server.rb, solr.rb and webui.rb, and the `chef::server` recipe may not work as desired. -We recommend using a recent version of Ubuntu or Debian for the Chef Server. +A recent version of Ubuntu or Debian is recommended for the Chef Server. * Ubuntu 9.10/10.04 * Debian testing/unstable @@ -53,7 +55,7 @@ Client Server ------ -The `chef::bootstrap_server` recipe uses the following other cookbooks from the Opscode repository. +The `chef::bootstrap_server` recipe uses the following other cookbooks from Opscode. * couchdb * `rabbitmq_chef` @@ -78,21 +80,27 @@ umask Sets the umask for files created by the server process via `Chef::Config[:umask]` in `/etc/chef/server.rb` -url_type --------- +`url_type` +---------- Set up the URLs the client should connect to with this. Default is `http`, which tells the client to connect to `http://server:4000`. If you set up your chef-server to use an SSL front-end for example with `chef::server_proxy`, set this to `https` for clients and the URLs will be `https://server/`. By default the only URL config setting for Chef 0.8.x+ is `Chef::Config[:chef_server_url]`. The other older URLs are still supported so you can split out the various functions of the Chef Server, but configuration of those is outside the scope of this cookbook. -init_style ----------- +`init_style` +------------ + +Specifies the init style to use. Possible values: -Specifies the init style to use. Default `runit`. Other possible values `init`, `bsd`, any other string will be treated as unknown and a message will be displayed during the Chef run. +* runit - uses runit to set up the service. Logs will be in `/etc/sv/chef-client/log/main`. Default value for this attribute. +* init - uses init scripts that are included in the `chef` gem. Logs will be in `/var/log/chef`. Only usable with debian/ubuntu and red hat family distributions. +* daemontools - uses daemontools to set up the service. Logs will be in `/etc/sv/chef-client/log/main`. +* bluepill - uses bluepill to set up the service. +* bsd - Prints a message with the chef-client command to use in rc.local. If your platform doesn't have a `runit` package or if the cookbook doesn't detect it, but you still want to use runit, set `init_style` to `none` and install runit separately. You may need to configure the runit services separately. -Using the `init` value for this attribute will retrieve the init scripts that are distributed with the Chef gem. +Using the `init` value for this attribute will retrieve the init scripts that are distributed with the Chef gem. This cookbook does not yet support Upstart for Ubuntu/Debian, but that is planned for a future release, and will be specified via this attribute. @@ -109,79 +117,79 @@ Any BSD and Gentoo: * `/var/chef` -run_path --------- +`run_path` +---------- Location for pidfiles on systems using init scripts. Default `/var/run/chef`. If `init_style` is `init`, this is used, and should match what the init script itself uses for the PID files. -cache_path ----------- +`cache_path` +------------ Location where the client will cache cookbooks and other data. Default is `cache` underneath the `chef[:path]` location. Linux distributions adhering to the FHS prefer `/var/cache/chef` instead. Base directory for data that is easily regenerated such as cookbook tarballs (`Chef::Config[:cookbook_tarballs]`) on the server, downloaded cookbooks on the client, etc. See the config templates. -backup_path ------------ +`backup_path` +------------- Location where backups of files, corresponds to the `file_backup_path` location. Defaults to `backup` under `chef[:path]` location. Set to `false` to use the old behavior which stores the backup files in the same directory as the target. FHS location suggestion: `/var/lib/chef/backup`. -serve_path ----------- +`serve_path` +------------ Used by the Chef server as the base location to "serve" cookbooks, roles and other assets. Default is `/srv/chef`. -server_version --------------- +`server_version` +---------------- Version of Chef to install for the server. Used by the `server_proxy` recipe to set the location of the DocumentRoot of the WebUI. Automatically determined via ohai's `chef_packages[:chef][:version]` by default. -client_version --------------- +`client_version` +---------------- Version of Chef to install for the client. Used to display a log message about the location of the init scripts when `init_style` is `init`, and can be used to upgrade `chef` gem with the `chef::bootstrap_client` recipe. Automatically determined via ohai's `chef_packages[:chef][:version]` by default. -client_interval ---------------- +`client_interval` +----------------- Number of seconds to run chef-client periodically. Default `1800` (30 minutes). -client_splay ------------- +`client_splay` +-------------- Splay interval to randomly add to interval. Default `20`. -log_dir -------- +`log_dir` +--------- When `init_style` is `init`, this directory needs to be created. The default is `/var/log/chef`. -client_log, indexer_log, server_log ------------------------------------ +`client_log`, `indexer_log`, `server_log` +----------------------------------------- These options are deprecated to reduce complexity and potential confusion. -server_port ------------ +`server_port` +------------- Port for the Server API service to listen on. Default `4000`. -webui_port ----------- +`webui_port` +------------ Port for the Server WebUI service to listen on. Default `4040`. -webui_enabled -------------- +`webui_enabled` +--------------- As of version 0.8.x+, the WebUI part of the Chef Server is optional, and disabled by default. To enable it, set this to true. -server_fqdn ------------ +`server_fqdn` +------------- Fully qualified domain name of the server. Default is `chef.domain` where domain is detected by Ohai. You should configure a DNS entry for your Chef Server. @@ -189,8 +197,8 @@ On servers, this specifies the URL the server expects to use by default `Chef::C On clients, this specifies the URL the client uses to connect to the server as `Chef::Config[:chef_server_url]`. -server_url ----------- +`server_url` +------------ Full URI for the Chef Server. Used for `chef_server_url` config setting. The default value combines the attributes `chef.url_type`, `chef.server_fqdn` and `chef.server_port`, creating for example "http://chef.example.com:4000". If you are using the Opscode Platform, set this to "https://api.opscode.com/organizations/ORGNAME", where ORGNAME is your organization's simple string name. @@ -199,13 +207,13 @@ SERVER PROXY The following attributes are used by the `server_proxy.rb` recipe, and are stored in the `server_proxy.rb` attributes file. -doc_root --------- +`doc_root` +---------- DocumentRoot for the WebUI. Also gets set in the vhost for the API, but it is not used since the vhost merely proxies to the server on port 4000. -server_ssl_req --------------- +`server_ssl_req` +---------------- Used by the `server_proxy` recipe, this attribute can be used to set up a self-signed SSL certificate automatically using OpenSSL. Fields: @@ -219,13 +227,13 @@ Used by the `server_proxy` recipe, this attribute can be used to set up a self-s This attribute is now in the `server_proxy.rb` attributes file, as it is specific to that context. -server_proxy.css_expire_hours ------------------------------ +`server_proxy.css_expire_hours` +------------------------------- Sets expiration time for CSS in the WebUI. -server_proxy.js_expire_hours ----------------------------- +`server_proxy.js_expire_hours` +------------------------------ Sets expiration time for JavaScript in the WebUI. @@ -241,15 +249,15 @@ The first two recipes described are for "bootstrapping" a system to be a Chef Cl These recipes are typically used with chef-solo using a JSON file of attributes and a run list, and a solo config file. For more information see [Bootstrap Chef RubyGems Installation](http://wiki.opscode.com/display/chef/Bootstrap+Chef+RubyGems+Installation) on the Chef Wiki. -bootstrap_client ----------------- +`bootstrap_client` +------------------ ONLY FOR RUBYGEMS INSTALLATIONS. Do not use this recipe if you installed Chef from packages for your platform. Use this recipe to "bootstrap" a client so it can connect to a Chef Server. This recipe does the following: * Ensures the gem installed matches the version desired (`client_version` attribute). -* Sets up the `chef-client` service depending on the `init_style` attribute (see above). +* Includes the `chef::client_service` recipe to ensure that `chef-client` is running as a service. * Sets up some directories for Chef to use. * Creates the client configuration file `/etc/chef/client.rb` based on the configuration passed via JSON. @@ -273,8 +281,8 @@ For configuring a new client to connect to a local Chef Server: This is the minimal JSON to use for the client configuration. See the ATTRIBUTES section above for more options. -bootstrap_server ----------------- +`bootstrap_server` +------------------ ONLY FOR RUBYGEMS INSTALLATIONS. Do not use this recipe if you installed Chef from packages for your platform. @@ -311,15 +319,22 @@ The recipe itself manages the `/etc/chef/client.rb` config file based on the att This recipe does not manage the `chef-client` service. It is assumed to have been set up and started from the `bootstrap_client` recipe above, or from OS / distribution packaging. The `chef-client` service should not be restarted as a result of `/etc/chef/client.rb` changing, as that can cause the current process running the client to be restarted, having unpredictable results. +`client_service` +---------------- + +Use this recipe on systems that should have a `chef-client` daemon running, such as when Knife bootstrap was used to install Chef on a new system. + +This recipe sets up the `chef-client` service depending on the `init_style` attribute (see above). It is included by the `chef::bootstrap_client` recipe. + default ------- There is no spoon :-). -delete_validation ------------------ +`delete_validation` +------------------- -This is a standalone recipe that merely deletes the validation certificate (default `/etc/chef/validation.pem`). Use this if managing the client config file is not required in your environment. +Use this recipe to delete the validation certificate (default `/etc/chef/validation.pem`) when using a `chef-client` after the client has been validated and authorized to connect to the server. Beware if using this on your Chef Server. First copy the validation.pem certificate file to another location, such as your knife configuration directory (`~/.chef`) or [Chef Repository](http://wiki.opscode.com/display/chef/Chef+Repository). @@ -341,8 +356,8 @@ Changes to the `/etc/chef/server.rb` will trigger a restart of these services. Since the Chef Server itself typically runs the CouchDB service for the data store, the recipe will do a compaction on the Chef database and all the views associated with the Chef Server. These compactions only occur if the database/view size is more than 100Mb. It will use the configured CouchDB URL, which is `http://localhost:5984` by default. The actual value used for the CouchDB server is from the `Chef::Config[:couchdb_url]`, so this can be dynamically changed. -server_proxy ------------- +`server_proxy` +-------------- This recipe sets up an Apache2 VirtualHost to proxy HTTPS for the Chef Server API and WebUI. @@ -351,8 +366,8 @@ The API will be proxied on port 443. If the `chef-serer-webui` is installed, it TEMPLATES ========= -chef_server.conf.erb --------------------- +`chef_server.conf.erb` +---------------------- VirtualHost file used by Apache2 in the `chef::server_proxy` recipe. @@ -366,8 +381,8 @@ server.rb.erb Configuration for the server and server components, lands in `/etc/chef/server.rb`. See above regarding Debian/Ubuntu packaging config files when using packages to install Chef. -sv-*run.erb ------------ +`sv-*run.erb` +------------- Various runit "run" scripts for the Chef services that get configured when `init_style` is "runit". diff --git a/chef/metadata.json b/chef/metadata.json index 0d8e9c65e..141f0d5a3 100644 --- a/chef/metadata.json +++ b/chef/metadata.json @@ -1,7 +1,7 @@ { "name": "chef", "description": "Installs and configures Chef for chef-client and chef-server", - "long_description": "BOOTSTRAP CHANGES\n=================\n\nThe `bootstrap` cookbook's recipes for configuring a RubyGem installation of Chef have been merged into this cookbook.\n\n bootstrap::client -> chef::bootstrap_client\n bootstrap::server -> chef::bootstrap_server\n\nBe aware of the following changes to this cookbook.\n\n* Bootstrap no longer generates a random password for the webui admin user. The default password is displayed on the webui login page and should be changed immediately after logging in.\n* Server configuration now has a setting for the cookbook tarballs. See the server.rb.erb template.\n* We now set the signing key/cert locations and set owner / group. See the server.rb.erb template.\n* The validation client name is configurable. See the attributes.\n\nDESCRIPTION\n===========\n\nThis cookbook is used to configure the system to be a Chef Client or a Chef Server. It is a complex cookbook, please read this entire document to understand how it works. For more information on how Chef itself works, see the [Chef Wiki](http://wiki.opscode.com)\n\nREQUIREMENTS\n============\n\nChef 0.8.16 or later is required.\n\nChef 0.9.0 or later is required to use the `chef.init_style` attribute value `init`, in order to have the init scripts available.\n\nPlatform\n--------\n\nIf using this cookbook to manage a Chef Server system that was installed from Debian/Ubuntu packages, note that in the packages, the configuration files are split up for server.rb, solr.rb and webui.rb, and the `chef::server` recipe may not work as desired.\n\nWe recommend using a recent version of Ubuntu or Debian for the Chef Server.\n\n* Ubuntu 9.10/10.04\n* Debian testing/unstable\n\nThese versions have newer versions of CouchDB and RabbitMQ packaged.\n\n`chef::client` is tested on Ubuntu 8.04+, Debian 5.0, CentOS 5.x, Fedora 10+, OpenBSD 4.6, FreeBSD 7.1 and Gentoo.\n\n`chef::bootstrap_client` is tested on the above. OpenSolaris 11 is also tested, but there's a bug in Ohai that requires some manual intervention (OHAI-122).\n\n`chef::server` is tested on Ubuntu 8.04+, Debian 5.0.\n\n`chef::bootstrap_server` is tested on Ubuntu 8.04+, Debian 5.0.\n\nClient\n------\n\n`runit` cookbook is suggested for RubyGems installation. No other cookbooks are required for clients.\n\nServer\n------\n\nThe `chef::bootstrap_server` recipe uses the following other cookbooks from the Opscode repository.\n\n* couchdb\n* `rabbitmq_chef`\n* openssl\n* zlib\n* xml\n* java\n\nThe `chef::server_proxy` recipe uses the following cookbook:\n\n* apache2\n\nATTRIBUTES\n==========\n\nThe attributes for configuring the `chef` cookbook are under the `chef` namespace on the node, i.e., `@node[:chef]` or `@node.chef`.\n\nWhen using the bootstrap recipe, set the desired attributes using a JSON file. See \"BOOTSTRAPPING\" for examples.\n\numask\n-----\n\nSets the umask for files created by the server process via `Chef::Config[:umask]` in `/etc/chef/server.rb`\n\nurl_type\n--------\n\nSet up the URLs the client should connect to with this. Default is `http`, which tells the client to connect to `http://server:4000`. If you set up your chef-server to use an SSL front-end for example with `chef::server_proxy`, set this to `https` for clients and the URLs will be `https://server/`.\n\nBy default the only URL config setting for Chef 0.8.x+ is `Chef::Config[:chef_server_url]`. The other older URLs are still supported so you can split out the various functions of the Chef Server, but configuration of those is outside the scope of this cookbook.\n\ninit_style\n----------\n\nSpecifies the init style to use. Default `runit`. Other possible values `init`, `bsd`, any other string will be treated as unknown and a message will be displayed during the Chef run.\n\nIf your platform doesn't have a `runit` package or if the cookbook doesn't detect it, but you still want to use runit, set `init_style` to `none` and install runit separately. You may need to configure the runit services separately.\n\nUsing the `init` value for this attribute will retrieve the init scripts that are distributed with the Chef gem. \n\nThis cookbook does not yet support Upstart for Ubuntu/Debian, but that is planned for a future release, and will be specified via this attribute.\n\npath\n----\n\nThis is the base location where Chef will store data and other artifacts. Default `/srv/chef` for RubyGems installed systems. If using Chef packages for your platform, the location preference varies. The default on Debian and Red Hat based systems is a filesystem hiearchy standard (FHS) suggestion. Some other locations you may consider, by platform:\n\nDebian and Red Hat based Linux distros (Ubuntu, CentOS, Fedora, etc):\n\n* `/var/lib/chef`\n\nAny BSD and Gentoo:\n\n* `/var/chef`\n\nrun_path\n--------\n\nLocation for pidfiles on systems using init scripts. Default `/var/run/chef`.\n\nIf `init_style` is `init`, this is used, and should match what the init script itself uses for the PID files.\n\ncache_path\n----------\n\nLocation where the client will cache cookbooks and other data. Default is `cache` underneath the `chef[:path]` location. Linux distributions adhering to the FHS prefer `/var/cache/chef` instead.\n\nBase directory for data that is easily regenerated such as cookbook tarballs (`Chef::Config[:cookbook_tarballs]`) on the server, downloaded cookbooks on the client, etc. See the config templates.\n\nbackup_path\n-----------\n\nLocation where backups of files, corresponds to the `file_backup_path` location. Defaults to `backup` under `chef[:path]` location. Set to `false` to use the old behavior which stores the backup files in the same directory as the target.\n\nFHS location suggestion: `/var/lib/chef/backup`.\n\nserve_path\n----------\n\nUsed by the Chef server as the base location to \"serve\" cookbooks, roles and other assets. Default is `/srv/chef`.\n\nserver_version\n--------------\n\nVersion of Chef to install for the server. Used by the `server_proxy` recipe to set the location of the DocumentRoot of the WebUI. Automatically determined via ohai's `chef_packages[:chef][:version]` by default.\n\nclient_version\n--------------\n\nVersion of Chef to install for the client. Used to display a log message about the location of the init scripts when `init_style` is `init`, and can be used to upgrade `chef` gem with the `chef::bootstrap_client` recipe. Automatically determined via ohai's `chef_packages[:chef][:version]` by default.\n\nclient_interval\n---------------\n\nNumber of seconds to run chef-client periodically. Default `1800` (30 minutes).\n\nclient_splay\n------------\n\nSplay interval to randomly add to interval. Default `20`.\n\nlog_dir\n-------\n\nWhen `init_style` is `init`, this directory needs to be created. The default is `/var/log/chef`.\n\nclient_log, indexer_log, server_log\n-----------------------------------\n\nThese options are deprecated to reduce complexity and potential confusion.\n\nserver_port\n-----------\n\nPort for the Server API service to listen on. Default `4000`.\n\nwebui_port\n----------\n\nPort for the Server WebUI service to listen on. Default `4040`.\n\nwebui_enabled\n-------------\n\nAs of version 0.8.x+, the WebUI part of the Chef Server is optional, and disabled by default. To enable it, set this to true.\n\nserver_fqdn\n-----------\n\nFully qualified domain name of the server. Default is `chef.domain` where domain is detected by Ohai. You should configure a DNS entry for your Chef Server.\n\nOn servers, this specifies the URL the server expects to use by default `Chef::Config[:chef_server_url]`, plus it is used in the `server_ssl_req` as the canonical name (CN) and in `server_proxy` for the vhost name.\n\nOn clients, this specifies the URL the client uses to connect to the server as `Chef::Config[:chef_server_url]`.\n\nserver_url\n----------\n\nFull URI for the Chef Server. Used for `chef_server_url` config setting. The default value combines the attributes `chef.url_type`, `chef.server_fqdn` and `chef.server_port`, creating for example \"http://chef.example.com:4000\". If you are using the Opscode Platform, set this to \"https://api.opscode.com/organizations/ORGNAME\", where ORGNAME is your organization's simple string name.\n\nSERVER PROXY\n------------\n\nThe following attributes are used by the `server_proxy.rb` recipe, and are stored in the `server_proxy.rb` attributes file.\n\ndoc_root\n--------\n\nDocumentRoot for the WebUI. Also gets set in the vhost for the API, but it is not used since the vhost merely proxies to the server on port 4000.\n\nserver_ssl_req\n--------------\n\nUsed by the `server_proxy` recipe, this attribute can be used to set up a self-signed SSL certificate automatically using OpenSSL. Fields:\n\n* C: country (two letter code)\n* ST: state/province\n* L: locality or city\n* O: organization\n* OU: organizational unit\n* CN: canonical name, usually the fully qualified domain name of the server (FQDN)\n* emailAddress: contact email address\n\nThis attribute is now in the `server_proxy.rb` attributes file, as it is specific to that context.\n\nserver_proxy.css_expire_hours\n-----------------------------\n\nSets expiration time for CSS in the WebUI.\n\nserver_proxy.js_expire_hours\n----------------------------\n\nSets expiration time for JavaScript in the WebUI.\n\nRECIPES AND USAGE\n=================\n\nThis section describes the recipes in the cookbook and how to use them in your environment.\n\nBOOTSTRAPPING\n-------------\n\nThe first two recipes described are for \"bootstrapping\" a system to be a Chef Client or Chef Server, respectively. Only use these recipes with RubyGems installations of Chef.\n\nThese recipes are typically used with chef-solo using a JSON file of attributes and a run list, and a solo config file. For more information see [Bootstrap Chef RubyGems Installation](http://wiki.opscode.com/display/chef/Bootstrap+Chef+RubyGems+Installation) on the Chef Wiki.\n\nbootstrap_client\n----------------\n\nONLY FOR RUBYGEMS INSTALLATIONS. Do not use this recipe if you installed Chef from packages for your platform.\n\nUse this recipe to \"bootstrap\" a client so it can connect to a Chef Server. This recipe does the following:\n\n* Ensures the gem installed matches the version desired (`client_version` attribute).\n* Sets up the `chef-client` service depending on the `init_style` attribute (see above).\n* Sets up some directories for Chef to use.\n* Creates the client configuration file `/etc/chef/client.rb` based on the configuration passed via JSON.\n\nFor configuring a new client to connect to the Opscode Platform:\n\n {\n \"chef\": {\n \"server_url\": \"https://api.opscode.com/organizations/ORGNAME\"\n },\n \"run_list\": \"recipe[chef::bootstrap_client]\"\n }\n\nFor configuring a new client to connect to a local Chef Server:\n\n {\n \"chef\": {\n \"server_url\": \"http://chef.example.com:4000\"\n },\n \"run_list\": \"recipe[chef::bootstrap_client]\"\n }\n\nThis is the minimal JSON to use for the client configuration. See the ATTRIBUTES section above for more options.\n\nbootstrap_server\n----------------\n\nONLY FOR RUBYGEMS INSTALLATIONS. Do not use this recipe if you installed Chef from packages for your platform.\n\nUse this recipe to \"bootstrap\" a system to become a Chef Server. This recipe does the following:\n\n* Includes the `chef::bootstrap_client` recipe to configure itself to be its own client.\n* Installs CouchDB from package or source depending on the platform.\n* Installs Java for the `chef-solr` search engine.\n* Installs RabbitMQ (`rabbitmq_chef` cookbook) for the `chef-solr-indexer` consumer.\n* Installs all the Server-related Gems.\n* Creates the server configuration file `/etc/chef/server.rb` based on the configuration passed via JSON.\n* Sets up some directories for the server to use.\n* Sets up the `chef-server`, `chef-solr`, `chef-solr-indexer` services depending on the `init_style` attribute (see above).\n\nMinimal JSON to use for the server configuration:\n\n {\n \"chef\": {\n \"server_url\": \"http://localhost.localdomain:4000\",\n },\n \"run_list\": \"recipe[chef::bootstrap_server]\"\n }\n\nNote that the `chef-server-webui` is optional and can be enabled if desired by adding this to the JSON under \"chef\":\n\n \"webui_enabled\": true\n\nclient\n------\n\nThe client recipe is used to manage the configuration of an already-installed and configured Chef client. It can be used after a RubyGems installation bootstrap (per above), or with clients that were installed from platform packaging.\n\nThe recipe itself manages the `/etc/chef/client.rb` config file based on the attributes in this cookbook. When the client config is updated, the recipe will also reread the configuration during the Chef run, so the current Chef run can be dynamically changed.\n\nThis recipe does not manage the `chef-client` service. It is assumed to have been set up and started from the `bootstrap_client` recipe above, or from OS / distribution packaging. The `chef-client` service should not be restarted as a result of `/etc/chef/client.rb` changing, as that can cause the current process running the client to be restarted, having unpredictable results.\n\ndefault\n-------\n\nThere is no spoon :-).\n\ndelete_validation\n-----------------\n\nThis is a standalone recipe that merely deletes the validation certificate (default `/etc/chef/validation.pem`). Use this if managing the client config file is not required in your environment.\n\nBeware if using this on your Chef Server. First copy the validation.pem certificate file to another location, such as your knife configuration directory (`~/.chef`) or [Chef Repository](http://wiki.opscode.com/display/chef/Chef+Repository).\n\nserver\n------\n\nThe server recipe includes the `chef::client` recipe above.\n\nThe recipe itself manages the services and the Server config file `/etc/chef/server.rb`. See above under Platform requirements for cavaet when running Chef Server installed via Debian/Ubuntu packages. Changes to the recipe to manage additional templates may be required.\n\nThe following services are managed:\n\n* chef-solr\n* chef-solr-indexer\n* chef-server\n* chef-webui (if installed)\n\nChanges to the `/etc/chef/server.rb` will trigger a restart of these services.\n\nSince the Chef Server itself typically runs the CouchDB service for the data store, the recipe will do a compaction on the Chef database and all the views associated with the Chef Server. These compactions only occur if the database/view size is more than 100Mb. It will use the configured CouchDB URL, which is `http://localhost:5984` by default. The actual value used for the CouchDB server is from the `Chef::Config[:couchdb_url]`, so this can be dynamically changed.\n\nserver_proxy\n------------\n\nThis recipe sets up an Apache2 VirtualHost to proxy HTTPS for the Chef Server API and WebUI.\n\nThe API will be proxied on port 443. If the `chef-serer-webui` is installed, it will be proxied on port 444. The recipe dynamically creates the OpenSSL certificate based on the `chef.server_ssl_req` attribute. It uses some additional configuration for Apache to improve performance of the webui. The virtual host template is `chef_server.conf.erb`. The DocumentRoot setting is used for the WebUI, but not the API, and is set with the attribute `chef.doc_root`.\n\nTEMPLATES\n=========\n\nchef_server.conf.erb\n--------------------\n\nVirtualHost file used by Apache2 in the `chef::server_proxy` recipe.\n\nclient.rb.erb\n-------------\n\nConfiguration for the client, lands in `/etc/chef/client.rb`.\n\nserver.rb.erb\n-------------\n\nConfiguration for the server and server components, lands in `/etc/chef/server.rb`. See above regarding Debian/Ubuntu packaging config files when using packages to install Chef.\n\nsv-*run.erb\n-----------\n\nVarious runit \"run\" scripts for the Chef services that get configured when `init_style` is \"runit\".\n\nLICENSE AND AUTHORS\n===================\n\n* Author: Joshua Timberman \n* Author: Joshua Sierles \n\n* Copyright 2008-2010, Opscode, Inc\n* Copyright 2009, 37signals\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\n", + "long_description": "BOOTSTRAP CHANGES\n=================\n\nThe `bootstrap` cookbook's recipes for configuring a RubyGem installation of Chef have been merged into this cookbook. Do not use the `bootstrap` cookbook on versions of Chef after 0.8.2.\n\n bootstrap::client -> chef::bootstrap_client\n bootstrap::server -> chef::bootstrap_server\n\nBe aware of the following changes to this cookbook.\n\n* Bootstrap no longer generates a random password for the webui admin user. The default password is displayed on the webui login page and should be changed immediately after logging in.\n* Server configuration now has a setting for the cookbook tarballs. See the server.rb.erb template.\n* We now set the signing key/cert locations and set owner / group. See the server.rb.erb template.\n* The validation client name is configurable. See the attributes.\n\nThe client service setup has been moved from the `chef::bootstrap_client` recipe into its own recipe, `chef::client_service`. This is to improve use with Knife bootstrap which already configures the client configuration file.\n\nDESCRIPTION\n===========\n\nThis cookbook is used to configure the system to be a Chef Client or a Chef Server. It is a complex cookbook, please read this entire document to understand how it works. For more information on how Chef itself works, see the [Chef Wiki](http://wiki.opscode.com)\n\nREQUIREMENTS\n============\n\nChef 0.8.16 or later is required.\n\nChef 0.9.0 or later is required to use the `chef.init_style` attribute value `init`, in order to have the init scripts available.\n\nPlatform\n--------\n\nIf using this cookbook to manage a Chef Server system that was installed from Debian/Ubuntu packages, note that in the packages, the configuration files are split up for server.rb, solr.rb and webui.rb, and the `chef::server` recipe may not work as desired.\n\nA recent version of Ubuntu or Debian is recommended for the Chef Server.\n\n* Ubuntu 9.10/10.04\n* Debian testing/unstable\n\nThese versions have newer versions of CouchDB and RabbitMQ packaged.\n\n`chef::client` is tested on Ubuntu 8.04+, Debian 5.0, CentOS 5.x, Fedora 10+, OpenBSD 4.6, FreeBSD 7.1 and Gentoo.\n\n`chef::bootstrap_client` is tested on the above. OpenSolaris 11 is also tested, but there's a bug in Ohai that requires some manual intervention (OHAI-122).\n\n`chef::server` is tested on Ubuntu 8.04+, Debian 5.0.\n\n`chef::bootstrap_server` is tested on Ubuntu 8.04+, Debian 5.0.\n\nClient\n------\n\n`runit` cookbook is suggested for RubyGems installation. No other cookbooks are required for clients.\n\nServer\n------\n\nThe `chef::bootstrap_server` recipe uses the following other cookbooks from Opscode.\n\n* couchdb\n* `rabbitmq_chef`\n* openssl\n* zlib\n* xml\n* java\n\nThe `chef::server_proxy` recipe uses the following cookbook:\n\n* apache2\n\nATTRIBUTES\n==========\n\nThe attributes for configuring the `chef` cookbook are under the `chef` namespace on the node, i.e., `@node[:chef]` or `@node.chef`.\n\nWhen using the bootstrap recipe, set the desired attributes using a JSON file. See \"BOOTSTRAPPING\" for examples.\n\numask\n-----\n\nSets the umask for files created by the server process via `Chef::Config[:umask]` in `/etc/chef/server.rb`\n\n`url_type`\n----------\n\nSet up the URLs the client should connect to with this. Default is `http`, which tells the client to connect to `http://server:4000`. If you set up your chef-server to use an SSL front-end for example with `chef::server_proxy`, set this to `https` for clients and the URLs will be `https://server/`.\n\nBy default the only URL config setting for Chef 0.8.x+ is `Chef::Config[:chef_server_url]`. The other older URLs are still supported so you can split out the various functions of the Chef Server, but configuration of those is outside the scope of this cookbook.\n\n`init_style`\n------------\n\nSpecifies the init style to use. Possible values:\n\n* runit - uses runit to set up the service. Logs will be in `/etc/sv/chef-client/log/main`. Default value for this attribute.\n* init - uses init scripts that are included in the `chef` gem. Logs will be in `/var/log/chef`. Only usable with debian/ubuntu and red hat family distributions.\n* daemontools - uses daemontools to set up the service. Logs will be in `/etc/sv/chef-client/log/main`.\n* bluepill - uses bluepill to set up the service.\n* bsd - Prints a message with the chef-client command to use in rc.local.\n\nIf your platform doesn't have a `runit` package or if the cookbook doesn't detect it, but you still want to use runit, set `init_style` to `none` and install runit separately. You may need to configure the runit services separately.\n\nUsing the `init` value for this attribute will retrieve the init scripts that are distributed with the Chef gem.\n\nThis cookbook does not yet support Upstart for Ubuntu/Debian, but that is planned for a future release, and will be specified via this attribute.\n\npath\n----\n\nThis is the base location where Chef will store data and other artifacts. Default `/srv/chef` for RubyGems installed systems. If using Chef packages for your platform, the location preference varies. The default on Debian and Red Hat based systems is a filesystem hiearchy standard (FHS) suggestion. Some other locations you may consider, by platform:\n\nDebian and Red Hat based Linux distros (Ubuntu, CentOS, Fedora, etc):\n\n* `/var/lib/chef`\n\nAny BSD and Gentoo:\n\n* `/var/chef`\n\n`run_path`\n----------\n\nLocation for pidfiles on systems using init scripts. Default `/var/run/chef`.\n\nIf `init_style` is `init`, this is used, and should match what the init script itself uses for the PID files.\n\n`cache_path`\n------------\n\nLocation where the client will cache cookbooks and other data. Default is `cache` underneath the `chef[:path]` location. Linux distributions adhering to the FHS prefer `/var/cache/chef` instead.\n\nBase directory for data that is easily regenerated such as cookbook tarballs (`Chef::Config[:cookbook_tarballs]`) on the server, downloaded cookbooks on the client, etc. See the config templates.\n\n`backup_path`\n-------------\n\nLocation where backups of files, corresponds to the `file_backup_path` location. Defaults to `backup` under `chef[:path]` location. Set to `false` to use the old behavior which stores the backup files in the same directory as the target.\n\nFHS location suggestion: `/var/lib/chef/backup`.\n\n`serve_path`\n------------\n\nUsed by the Chef server as the base location to \"serve\" cookbooks, roles and other assets. Default is `/srv/chef`.\n\n`server_version`\n----------------\n\nVersion of Chef to install for the server. Used by the `server_proxy` recipe to set the location of the DocumentRoot of the WebUI. Automatically determined via ohai's `chef_packages[:chef][:version]` by default.\n\n`client_version`\n----------------\n\nVersion of Chef to install for the client. Used to display a log message about the location of the init scripts when `init_style` is `init`, and can be used to upgrade `chef` gem with the `chef::bootstrap_client` recipe. Automatically determined via ohai's `chef_packages[:chef][:version]` by default.\n\n`client_interval`\n-----------------\n\nNumber of seconds to run chef-client periodically. Default `1800` (30 minutes).\n\n`client_splay`\n--------------\n\nSplay interval to randomly add to interval. Default `20`.\n\n`log_dir`\n---------\n\nWhen `init_style` is `init`, this directory needs to be created. The default is `/var/log/chef`.\n\n`client_log`, `indexer_log`, `server_log`\n-----------------------------------------\n\nThese options are deprecated to reduce complexity and potential confusion.\n\n`server_port`\n-------------\n\nPort for the Server API service to listen on. Default `4000`.\n\n`webui_port`\n------------\n\nPort for the Server WebUI service to listen on. Default `4040`.\n\n`webui_enabled`\n---------------\n\nAs of version 0.8.x+, the WebUI part of the Chef Server is optional, and disabled by default. To enable it, set this to true.\n\n`server_fqdn`\n-------------\n\nFully qualified domain name of the server. Default is `chef.domain` where domain is detected by Ohai. You should configure a DNS entry for your Chef Server.\n\nOn servers, this specifies the URL the server expects to use by default `Chef::Config[:chef_server_url]`, plus it is used in the `server_ssl_req` as the canonical name (CN) and in `server_proxy` for the vhost name.\n\nOn clients, this specifies the URL the client uses to connect to the server as `Chef::Config[:chef_server_url]`.\n\n`server_url`\n------------\n\nFull URI for the Chef Server. Used for `chef_server_url` config setting. The default value combines the attributes `chef.url_type`, `chef.server_fqdn` and `chef.server_port`, creating for example \"http://chef.example.com:4000\". If you are using the Opscode Platform, set this to \"https://api.opscode.com/organizations/ORGNAME\", where ORGNAME is your organization's simple string name.\n\nSERVER PROXY\n------------\n\nThe following attributes are used by the `server_proxy.rb` recipe, and are stored in the `server_proxy.rb` attributes file.\n\n`doc_root`\n----------\n\nDocumentRoot for the WebUI. Also gets set in the vhost for the API, but it is not used since the vhost merely proxies to the server on port 4000.\n\n`server_ssl_req`\n----------------\n\nUsed by the `server_proxy` recipe, this attribute can be used to set up a self-signed SSL certificate automatically using OpenSSL. Fields:\n\n* C: country (two letter code)\n* ST: state/province\n* L: locality or city\n* O: organization\n* OU: organizational unit\n* CN: canonical name, usually the fully qualified domain name of the server (FQDN)\n* emailAddress: contact email address\n\nThis attribute is now in the `server_proxy.rb` attributes file, as it is specific to that context.\n\n`server_proxy.css_expire_hours`\n-------------------------------\n\nSets expiration time for CSS in the WebUI.\n\n`server_proxy.js_expire_hours`\n------------------------------\n\nSets expiration time for JavaScript in the WebUI.\n\nRECIPES AND USAGE\n=================\n\nThis section describes the recipes in the cookbook and how to use them in your environment.\n\nBOOTSTRAPPING\n-------------\n\nThe first two recipes described are for \"bootstrapping\" a system to be a Chef Client or Chef Server, respectively. Only use these recipes with RubyGems installations of Chef.\n\nThese recipes are typically used with chef-solo using a JSON file of attributes and a run list, and a solo config file. For more information see [Bootstrap Chef RubyGems Installation](http://wiki.opscode.com/display/chef/Bootstrap+Chef+RubyGems+Installation) on the Chef Wiki.\n\n`bootstrap_client`\n------------------\n\nONLY FOR RUBYGEMS INSTALLATIONS. Do not use this recipe if you installed Chef from packages for your platform.\n\nUse this recipe to \"bootstrap\" a client so it can connect to a Chef Server. This recipe does the following:\n\n* Ensures the gem installed matches the version desired (`client_version` attribute).\n* Includes the `chef::client_service` recipe to ensure that `chef-client` is running as a service.\n* Sets up some directories for Chef to use.\n* Creates the client configuration file `/etc/chef/client.rb` based on the configuration passed via JSON.\n\nFor configuring a new client to connect to the Opscode Platform:\n\n {\n \"chef\": {\n \"server_url\": \"https://api.opscode.com/organizations/ORGNAME\"\n },\n \"run_list\": \"recipe[chef::bootstrap_client]\"\n }\n\nFor configuring a new client to connect to a local Chef Server:\n\n {\n \"chef\": {\n \"server_url\": \"http://chef.example.com:4000\"\n },\n \"run_list\": \"recipe[chef::bootstrap_client]\"\n }\n\nThis is the minimal JSON to use for the client configuration. See the ATTRIBUTES section above for more options.\n\n`bootstrap_server`\n------------------\n\nONLY FOR RUBYGEMS INSTALLATIONS. Do not use this recipe if you installed Chef from packages for your platform.\n\nUse this recipe to \"bootstrap\" a system to become a Chef Server. This recipe does the following:\n\n* Includes the `chef::bootstrap_client` recipe to configure itself to be its own client.\n* Installs CouchDB from package or source depending on the platform.\n* Installs Java for the `chef-solr` search engine.\n* Installs RabbitMQ (`rabbitmq_chef` cookbook) for the `chef-solr-indexer` consumer.\n* Installs all the Server-related Gems.\n* Creates the server configuration file `/etc/chef/server.rb` based on the configuration passed via JSON.\n* Sets up some directories for the server to use.\n* Sets up the `chef-server`, `chef-solr`, `chef-solr-indexer` services depending on the `init_style` attribute (see above).\n\nMinimal JSON to use for the server configuration:\n\n {\n \"chef\": {\n \"server_url\": \"http://localhost.localdomain:4000\",\n },\n \"run_list\": \"recipe[chef::bootstrap_server]\"\n }\n\nNote that the `chef-server-webui` is optional and can be enabled if desired by adding this to the JSON under \"chef\":\n\n \"webui_enabled\": true\n\nclient\n------\n\nThe client recipe is used to manage the configuration of an already-installed and configured Chef client. It can be used after a RubyGems installation bootstrap (per above), or with clients that were installed from platform packaging.\n\nThe recipe itself manages the `/etc/chef/client.rb` config file based on the attributes in this cookbook. When the client config is updated, the recipe will also reread the configuration during the Chef run, so the current Chef run can be dynamically changed.\n\nThis recipe does not manage the `chef-client` service. It is assumed to have been set up and started from the `bootstrap_client` recipe above, or from OS / distribution packaging. The `chef-client` service should not be restarted as a result of `/etc/chef/client.rb` changing, as that can cause the current process running the client to be restarted, having unpredictable results.\n\n`client_service`\n----------------\n\nUse this recipe on systems that should have a `chef-client` daemon running, such as when Knife bootstrap was used to install Chef on a new system.\n\nThis recipe sets up the `chef-client` service depending on the `init_style` attribute (see above). It is included by the `chef::bootstrap_client` recipe.\n\ndefault\n-------\n\nThere is no spoon :-).\n\n`delete_validation`\n-------------------\n\nUse this recipe to delete the validation certificate (default `/etc/chef/validation.pem`) when using a `chef-client` after the client has been validated and authorized to connect to the server.\n\nBeware if using this on your Chef Server. First copy the validation.pem certificate file to another location, such as your knife configuration directory (`~/.chef`) or [Chef Repository](http://wiki.opscode.com/display/chef/Chef+Repository).\n\nserver\n------\n\nThe server recipe includes the `chef::client` recipe above.\n\nThe recipe itself manages the services and the Server config file `/etc/chef/server.rb`. See above under Platform requirements for cavaet when running Chef Server installed via Debian/Ubuntu packages. Changes to the recipe to manage additional templates may be required.\n\nThe following services are managed:\n\n* chef-solr\n* chef-solr-indexer\n* chef-server\n* chef-webui (if installed)\n\nChanges to the `/etc/chef/server.rb` will trigger a restart of these services.\n\nSince the Chef Server itself typically runs the CouchDB service for the data store, the recipe will do a compaction on the Chef database and all the views associated with the Chef Server. These compactions only occur if the database/view size is more than 100Mb. It will use the configured CouchDB URL, which is `http://localhost:5984` by default. The actual value used for the CouchDB server is from the `Chef::Config[:couchdb_url]`, so this can be dynamically changed.\n\n`server_proxy`\n--------------\n\nThis recipe sets up an Apache2 VirtualHost to proxy HTTPS for the Chef Server API and WebUI.\n\nThe API will be proxied on port 443. If the `chef-serer-webui` is installed, it will be proxied on port 444. The recipe dynamically creates the OpenSSL certificate based on the `chef.server_ssl_req` attribute. It uses some additional configuration for Apache to improve performance of the webui. The virtual host template is `chef_server.conf.erb`. The DocumentRoot setting is used for the WebUI, but not the API, and is set with the attribute `chef.doc_root`.\n\nTEMPLATES\n=========\n\n`chef_server.conf.erb`\n----------------------\n\nVirtualHost file used by Apache2 in the `chef::server_proxy` recipe.\n\nclient.rb.erb\n-------------\n\nConfiguration for the client, lands in `/etc/chef/client.rb`.\n\nserver.rb.erb\n-------------\n\nConfiguration for the server and server components, lands in `/etc/chef/server.rb`. See above regarding Debian/Ubuntu packaging config files when using packages to install Chef.\n\n`sv-*run.erb`\n-------------\n\nVarious runit \"run\" scripts for the Chef services that get configured when `init_style` is \"runit\".\n\nLICENSE AND AUTHORS\n===================\n\n* Author: Joshua Timberman \n* Author: Joshua Sierles \n\n* Copyright 2008-2010, Opscode, Inc\n* Copyright 2009, 37signals\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\n", "maintainer": "Opscode, Inc.", "maintainer_email": "cookbooks@opscode.com", "license": "Apache 2.0", @@ -31,6 +31,12 @@ "dependencies": { "runit": [ + ], + "bluepill": [ + + ], + "daemontools": [ + ], "couchdb": [ @@ -71,11 +77,12 @@ "recipes": { "chef": "Default recipe is empty, use one of the other recipes.", "chef::client": "Sets up a client to talk to a chef-server", + "chef::client_service": "Sets up a client daemon to run periodically", "chef::bootstrap_client": "Set up rubygem installed chef client", "chef::delete_validation": "Deletes validation.pem after client registers", "chef::server": "Configures a chef API server as a merb application", "chef::bootstrap_server": "Set up rubygem installed chef server", "chef::server_proxy": "Configures Apache2 proxy for API and WebUI" }, - "version": "0.21.3" + "version": "0.22.0" } \ No newline at end of file diff --git a/chef/metadata.rb b/chef/metadata.rb index 5157a0778..05b6a088a 100644 --- a/chef/metadata.rb +++ b/chef/metadata.rb @@ -3,9 +3,10 @@ license "Apache 2.0" description "Installs and configures Chef for chef-client and chef-server" long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.21.3" +version "0.22.0" recipe "chef", "Default recipe is empty, use one of the other recipes." recipe "chef::client", "Sets up a client to talk to a chef-server" +recipe "chef::client_service", "Sets up a client daemon to run periodically" recipe "chef::bootstrap_client", "Set up rubygem installed chef client" recipe "chef::delete_validation", "Deletes validation.pem after client registers" recipe "chef::server", "Configures a chef API server as a merb application" @@ -16,6 +17,6 @@ supports os end -%w{ runit couchdb rabbitmq_chef apache2 openssl zlib xml java }.each do |cb| +%w{ runit bluepill daemontools couchdb rabbitmq_chef apache2 openssl zlib xml java }.each do |cb| depends cb end diff --git a/chef/recipes/bootstrap_client.rb b/chef/recipes/bootstrap_client.rb index 973d743b0..4420ef512 100644 --- a/chef/recipes/bootstrap_client.rb +++ b/chef/recipes/bootstrap_client.rb @@ -49,53 +49,4 @@ mode "644" end -case node[:chef][:init_style] -when "runit" - - include_recipe "runit" - runit_service "chef-client" - -when "init" - - directory node[:chef][:run_path] do - action :create - owner "root" - group root_group - mode "755" - end - - dist_dir = value_for_platform( - ["ubuntu", "debian"] => { "default" => "debian" }, - ["redhat", "centos", "fedora"] => { "default" => "redhat"} - ) - - conf_dir = value_for_platform( - ["ubuntu", "debian"] => { "default" => "default" }, - ["redhat", "centos", "fedora"] => { "default" => "sysconfig"} - ) - - chef_version = node.chef_packages.chef[:version] - - init_content = IO.read("#{node.languages.ruby.gems_dir}/gems/chef-#{chef_version}/distro/#{dist_dir}/etc/init.d/chef-client") - conf_content = IO.read("#{node.languages.ruby.gems_dir}/gems/chef-#{chef_version}/distro/#{dist_dir}/etc/#{conf_dir}/chef-client") - - file "/etc/init.d/chef-client" do - content init_content - mode 0755 - end - - file "/etc/#{conf_dir}/chef-client" do - content conf_content - mode 0644 - end - - service "chef-client" do - action :enable - end - -when "bsd" - log("You specified service style 'bsd'. You will need to set up your rc.local file.") - log("Hint: chef-client -i #{node[:chef][:client_interval]} -s #{node[:chef][:client_splay]}") -else - log("Could not determine service init style, manual intervention required to start up the chef-client service.") -end +include_recipe "chef::client_service" diff --git a/chef/recipes/client_service.rb b/chef/recipes/client_service.rb new file mode 100644 index 000000000..a7b36023c --- /dev/null +++ b/chef/recipes/client_service.rb @@ -0,0 +1,100 @@ +# +# Author:: Joshua Timberman +# Cookbook Name:: chef +# Recipe:: bootstrap_client +# +# Copyright 2009-2010, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +root_group = value_for_platform( + "openbsd" => { "default" => "wheel" }, + "freebsd" => { "default" => "wheel" }, + "default" => "root" +) + +case node[:chef][:init_style] +when "runit" + + include_recipe "runit" + runit_service "chef-client" + +when "init" + + directory node[:chef][:run_path] do + action :create + owner "root" + group root_group + mode "755" + end + + dist_dir = value_for_platform( + ["ubuntu", "debian"] => { "default" => "debian" }, + ["redhat", "centos", "fedora"] => { "default" => "redhat"} + ) + + conf_dir = value_for_platform( + ["ubuntu", "debian"] => { "default" => "default" }, + ["redhat", "centos", "fedora"] => { "default" => "sysconfig"} + ) + + chef_version = node.chef_packages.chef[:version] + + init_content = IO.read("#{node[:languages][:ruby][:gems_dir]}/gems/chef-#{chef_version}/distro/#{dist_dir}/etc/init.d/chef-client") + conf_content = IO.read("#{node[:languages][:ruby][:gems_dir]}/gems/chef-#{chef_version}/distro/#{dist_dir}/etc/#{conf_dir}/chef-client") + + file "/etc/init.d/chef-client" do + content init_content + mode 0755 + end + + file "/etc/#{conf_dir}/chef-client" do + content conf_content + mode 0644 + end + + service "chef-client" do + action :enable + end + +when "bluepill" + + include_recipe "bluepill" + + template "#{node[:bluepill][:conf_dir]}/chef-client.pill" do + source "chef-client.pill.erb" + mode 0644 + end + + bluepill_service "chef-client" do + action [:enable,:load,:start] + end + +when "daemontools" + + include_recipe "daemontools" + + daemontools_service "chef-client" do + directory "/etc/sv/chef-client" + template "chef-client" + action [:enable,:start] + log true + end + +when "bsd" + log("You specified service style 'bsd'. You will need to set up your rc.local file.") + log("Hint: chef-client -i #{node[:chef][:client_interval]} -s #{node[:chef][:client_splay]}") +else + log("Could not determine service init style, manual intervention required to start up the chef-client service.") +end diff --git a/chef/templates/default/chef-client.pill.erb b/chef/templates/default/chef-client.pill.erb new file mode 100644 index 000000000..148f067d7 --- /dev/null +++ b/chef/templates/default/chef-client.pill.erb @@ -0,0 +1,13 @@ +Bluepill.application("chef-client") do |app| + + app.process("chef-client") do |process| + process.pid_file = "<%= node[:chef[:run_path] %>/chef-client.pid" + process.working_dir = "<%= node[:chef][:path] %>" + process.start_command = "env PATH=/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin<% if node[:languages][:ruby][:gems_dir] %>:<%= node[:languages][:ruby][:gems_dir] %>/bin<% end -%> chef-client -i <%= node[:chef][:client_interval] %> -s <%= node[:chef][:client_splay] %>" + process.stdout = process.stderr = "<%= node[:chef][:log_dir] %>/client.log" + process.start_grace_time = 5.seconds + process.stop_grace_time = 5.seconds + process.restart_grace_time = 30.seconds + end + +end