From 6b9a73c2f8a86143aec4eb80ac8ef5c542f967e4 Mon Sep 17 00:00:00 2001 From: Adam Jacob Date: Mon, 27 Feb 2012 11:21:33 -0800 Subject: [PATCH] Adding a README, config options, and ha admin --- README.markdown | 36 + assets/ha-topology.graffle | Bin 0 -> 3238 bytes source/administration.rst | 1 + source/administration/configuration.rst | 6017 +++++++++++++++++++ source/administration/high_availability.rst | 414 ++ source/images/ha-topology.png | Bin 0 -> 37656 bytes source/index.rst | 8 +- source/installation.rst | 4 +- 8 files changed, 6472 insertions(+), 8 deletions(-) create mode 100644 README.markdown create mode 100644 assets/ha-topology.graffle create mode 100644 source/administration/configuration.rst create mode 100644 source/images/ha-topology.png diff --git a/README.markdown b/README.markdown new file mode 100644 index 0000000..a7618fc --- /dev/null +++ b/README.markdown @@ -0,0 +1,36 @@ +# Private Chef Administration Guide + +This repository has the source material for the Private Chef Administration guide. + +## Prerequisites + +To use this documentation, you'll need to have [Sphinx](http://sphinx.pocoo.org) installed, +along with [Pygments](http://pygments.org) for syntax highlighting. If you want to generate +PDF documentation, you'll also need to have a version of [LaTeX](http://www.latex-project.org/) +installed (specifically latex2pdf). + +## Installation + +```bash +$ easy_install Pygments +$ easy_install sphinx +``` + +## Build + +To build the documentation: + +```bash +$ make html +``` + +Will generate HTML output in build/html/index.html. + +Run: + +```bash +$ make help +``` + +For alternative formats. + diff --git a/assets/ha-topology.graffle b/assets/ha-topology.graffle new file mode 100644 index 0000000000000000000000000000000000000000..8ced798f61e81fbdf41be93466007307edba0767 GIT binary patch literal 3238 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 and :doc:`high-availability ` +installation documentation for complete configuration examples. + +Applying configuration changes +------------------------------ + +The :command:`private-chef-ctl reconfigure` command reads your +:file:`/etc/opscode/private-chef.rb` file and configures all of the services +for you. Any time you make a change to your configuration, you need to run +:command:`private-chef-ctl reconfigure` to apply it. + +.. index:: + pair: configuration; general options + +Common Options +--------------- + +.. index:: + triple: configuration; common options; topology + +topology +~~~~~~~~ + +Private Chef configurations are governed by a ``topology``, which describes +which of our recommended architectures you plan to install. Your choices are: + +*Default Value*: + +.. code-block:: ruby + + "standalone" + +*Options*: + +- **standalone** (default): All of Private Chef running on a single server. +- **manual**: Identical to standalone. +- **tier**: Many front-end servers to a single, non-high-availability back-end server. +- **ha**: Many front-end servers to a high-availability back-end cluster. + +*Example*: + +.. code-block:: ruby + + topology "standalone" + topology "manual" + topology "tier" + topology "ha" + +.. index:: + triple: configuration; common options; notification_email + +notification_email +~~~~~~~~~~~~~~~~~~ + +Private Chef generates notification emails from internal monitoring and +periodic cron jobs. This is the email address they will be sent to. + +*Default Value*: ``pc-default@opscode.com`` + +*Example*: + +.. code-block:: ruby + + notification_email "sysadmin@example.com" + +.. index:: + triple: configuration; common options; server + +server +~~~~~~~~~~~~~~~~~~ + +Server entries represent an individual server in your Private Chef +cluster. Each server has at least an ``ipaddress`` and ``role``, +and can optionally be marked to run the ``bootstrap`` process. + +*Example*: + +For a back-end server, marked to run the initial bootstrap: + +.. code-block:: ruby + + server "be1.example.com", + :ipaddress => "192.168.4.1", + :role => "backend", + :bootstrap => true + +For a back-end server, not marked to run the bootstrap: + +.. code-block:: ruby + + server "be2.example.com", + :ipaddress => "192.168.4.2", + :role => "backend" + +A front-end server: + +.. code-block:: ruby + + server "fe1.example.com", + :ipaddress => "192.168.4.3", + :role => "fronted" + +.. index:: + triple: configuration; common options; api_fqdn + +api_fqdn +~~~~~~~~~~~~~~~~~~ + +In a tiered or high availability scenario, you are expected to be +running multiple frontend servers. The ``api_fqdn`` should point +to the fully qualified domain name that you want to use for +accessing the Web UI and API. + +*Example*: + +In the below example, you would access your Private Chef server at +``chef.example.com``. + +.. code-block:: ruby + + api_fqdn "chef.example.com" + +.. index:: + triple: configuration; common options; backend_vip + +backend_vip +~~~~~~~~~~~~~~~~~~ + +When operating in a tiered or high-availability scenario, you need to +configure the ``backend_vip``. In a High Availability setup, this +should be set to the fully qualified domain name and IP address +you will be sharing between your back-end servers. In a Tiered configuration, +it should point directly to your back-end server. + +*Example*: + +.. code-block:: ruby + + backend_vip "be1.example.com", + :ipaddress => "192.168.4.1" + + + +.. index:: + pair: configuration; bootstrap + +bootstrap +------------------------------------------------ + +.. index:: + triple: configuration; bootstrap; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Whether or not we should attempt to bootstrap. + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + bootstrap['enable'] = true + +.. index:: + pair: configuration; couchdb + +couchdb +------------------------------------------------ + +.. index:: + triple: configuration; couchdb; batch_save_interval + +batch_save_interval +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Number of milliseconds after which to save a batch. + +*Default Value*: + +.. code-block:: ruby + + 1000 + +*Example*: + +.. code-block:: ruby + + couchdb['batch_save_interval'] = 1000 + +.. index:: + triple: configuration; couchdb; batch_save_size + +batch_save_size +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Number of documents after which to save a batch. + +*Default Value*: + +.. code-block:: ruby + + 1000 + +*Example*: + +.. code-block:: ruby + + couchdb['batch_save_size'] = 1000 + +.. index:: + triple: configuration; couchdb; bind_address + +bind_address +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The IP Address to bind CouchDB to. + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + couchdb['bind_address'] = "127.0.0.1" + +.. index:: + triple: configuration; couchdb; data_dir + +data_dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/couchdb/db" + +*Example*: + +.. code-block:: ruby + + couchdb['data_dir'] = "/var/opt/opscode/couchdb/db" + +.. index:: + triple: configuration; couchdb; delayed_commits + +delayed_commits +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "true" + +*Example*: + +.. code-block:: ruby + + couchdb['delayed_commits'] = "true" + +.. index:: + triple: configuration; couchdb; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/couchdb" + +*Example*: + +.. code-block:: ruby + + couchdb['dir'] = "/var/opt/opscode/couchdb" + +.. index:: + triple: configuration; couchdb; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + couchdb['enable'] = true + +.. index:: + triple: configuration; couchdb; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + couchdb['ha'] = false + +.. index:: + triple: configuration; couchdb; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/couchdb" + +*Example*: + +.. code-block:: ruby + + couchdb['log_directory'] = "/var/log/opscode/couchdb" + +.. index:: + triple: configuration; couchdb; log_level + +log_level +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "error" + +*Example*: + +.. code-block:: ruby + + couchdb['log_level'] = "error" + +.. index:: + triple: configuration; couchdb; max_attachment_chunk_size + +max_attachment_chunk_size +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "4294967296" + +*Example*: + +.. code-block:: ruby + + couchdb['max_attachment_chunk_size'] = "4294967296" + +.. index:: + triple: configuration; couchdb; max_dbs_open + +max_dbs_open +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 10000 + +*Example*: + +.. code-block:: ruby + + couchdb['max_dbs_open'] = 10000 + +.. index:: + triple: configuration; couchdb; max_document_size + +max_document_size +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "4294967296" + +*Example*: + +.. code-block:: ruby + + couchdb['max_document_size'] = "4294967296" + +.. index:: + triple: configuration; couchdb; os_process_timeout + +os_process_timeout +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "300000" + +*Example*: + +.. code-block:: ruby + + couchdb['os_process_timeout'] = "300000" + +.. index:: + triple: configuration; couchdb; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 5984 + +*Example*: + +.. code-block:: ruby + + couchdb['port'] = 5984 + +.. index:: + triple: configuration; couchdb; reduce_limit + +reduce_limit +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "false" + +*Example*: + +.. code-block:: ruby + + couchdb['reduce_limit'] = "false" + +.. index:: + triple: configuration; couchdb; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + couchdb['vip'] = "127.0.0.1" + +.. index:: + pair: configuration; dark_launch + +dark_launch +------------------------------------------------ + +.. index:: + triple: configuration; dark_launch; new_theme + +new_theme +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + dark_launch['new_theme'] = true + +.. index:: + triple: configuration; dark_launch; private-chef + +private-chef +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + dark_launch['private-chef'] = true + +.. index:: + triple: configuration; dark_launch; quick_start + +quick_start +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + dark_launch['quick_start'] = false + +.. index:: + triple: configuration; dark_launch; sql_users + +sql_users +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + dark_launch['sql_users'] = true + +.. index:: + pair: configuration; database_type + +database_type +------------------------------------------------ + +.. index:: + triple: configuration; general options; database_type + +database_type +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + postgresql + +*Example*: + +.. code-block:: ruby + + database_type "postgresql" + +.. index:: + pair: configuration; drbd + +drbd +------------------------------------------------ + +.. index:: + triple: configuration; drbd; data_dir + +data_dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/drbd/data" + +*Example*: + +.. code-block:: ruby + + drbd['data_dir'] = "/var/opt/opscode/drbd/data" + +.. index:: + triple: configuration; drbd; device + +device +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/dev/drbd0" + +*Example*: + +.. code-block:: ruby + + drbd['device'] = "/dev/drbd0" + +.. index:: + triple: configuration; drbd; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/drbd" + +*Example*: + +.. code-block:: ruby + + drbd['dir'] = "/var/opt/opscode/drbd" + +.. index:: + triple: configuration; drbd; disk + +disk +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/dev/opscode/drbd" + +*Example*: + +.. code-block:: ruby + + drbd['disk'] = "/dev/opscode/drbd" + +.. index:: + triple: configuration; drbd; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + drbd['enable'] = false + +.. index:: + triple: configuration; drbd; flexible_meta_disk + +flexible_meta_disk +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "internal" + +*Example*: + +.. code-block:: ruby + + drbd['flexible_meta_disk'] = "internal" + +.. index:: + triple: configuration; drbd; primary + +primary +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + {"fqdn"=>"ubuntu.localdomain", "ip"=>"192.168.4.131", "port"=>7788} + + +*Example*: + +.. code-block:: ruby + + drbd['primary'] = {"fqdn"=>"ubuntu.localdomain", "ip"=>"192.168.4.131", "port"=>7788} + + +.. index:: + triple: configuration; drbd; secondary + +secondary +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + {"fqdn"=>"ubuntu.localdomain", "ip"=>"192.168.4.131", "port"=>7788} + + +*Example*: + +.. code-block:: ruby + + drbd['secondary'] = {"fqdn"=>"ubuntu.localdomain", "ip"=>"192.168.4.131", "port"=>7788} + + +.. index:: + triple: configuration; drbd; shared_secret + +shared_secret +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "promisespromises" + +*Example*: + +.. code-block:: ruby + + drbd['shared_secret'] = "promisespromises" + +.. index:: + triple: configuration; drbd; sync_rate + +sync_rate +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "40M" + +*Example*: + +.. code-block:: ruby + + drbd['sync_rate'] = "40M" + +.. index:: + triple: configuration; drbd; version + +version +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "8.4.1" + +*Example*: + +.. code-block:: ruby + + drbd['version'] = "8.4.1" + +.. index:: + pair: configuration; estatsd + +estatsd +------------------------------------------------ + +.. index:: + triple: configuration; estatsd; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/estatsd" + +*Example*: + +.. code-block:: ruby + + estatsd['dir'] = "/var/opt/opscode/estatsd" + +.. index:: + triple: configuration; estatsd; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + estatsd['enable'] = true + +.. index:: + triple: configuration; estatsd; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/estatsd" + +*Example*: + +.. code-block:: ruby + + estatsd['log_directory'] = "/var/log/opscode/estatsd" + +.. index:: + triple: configuration; estatsd; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9466 + +*Example*: + +.. code-block:: ruby + + estatsd['port'] = 9466 + +.. index:: + triple: configuration; estatsd; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + estatsd['vip'] = "127.0.0.1" + +.. index:: + pair: configuration; keepalived + +keepalived +------------------------------------------------ + +.. index:: + triple: configuration; keepalived; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/keepalived" + +*Example*: + +.. code-block:: ruby + + keepalived['dir'] = "/var/opt/opscode/keepalived" + +.. index:: + triple: configuration; keepalived; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + keepalived['enable'] = false + +.. index:: + triple: configuration; keepalived; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/keepalived" + +*Example*: + +.. code-block:: ruby + + keepalived['log_directory'] = "/var/log/opscode/keepalived" + +.. index:: + triple: configuration; keepalived; service_order + +service_order +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + [{"key"=>"couchdb", "service_name"=>"couchdb"}, + {"key"=>"postgresql", "service_name"=>"postgres"}, + {"key"=>"rabbitmq", "service_name"=>"rabbitmq"}, + {"key"=>"redis", "service_name"=>"redis"}, + {"key"=>"opscode-authz", "service_name"=>"opscode-authz"}, + {"key"=>"opscode-certificate", "service_name"=>"opscode-certificate"}, + {"key"=>"opscode-account", "service_name"=>"opscode-account"}, + {"key"=>"opscode-solr", "service_name"=>"opscode-solr"}, + {"key"=>"opscode-expander", "service_name"=>"opscode-expander"}, + {"key"=>"opscode-expander", "service_name"=>"opscode-expander-reindexer"}, + {"key"=>"opscode-org-creator", "service_name"=>"opscode-org-creator"}, + {"key"=>"opscode-chef", "service_name"=>"opscode-chef"}, + {"key"=>"opscode-erchef", "service_name"=>"opscode-erchef"}, + {"key"=>"opscode-webui", "service_name"=>"opscode-webui"}, + {"key"=>"nagios", "service_name"=>"php-fpm"}, + {"key"=>"nagios", "service_name"=>"fcgiwrap"}, + {"key"=>"nagios", "service_name"=>"nagios"}, + {"key"=>"nginx", "service_name"=>"nginx"}] + + +*Example*: + +.. code-block:: ruby + + keepalived['service_order'] = [{"key"=>"couchdb", "service_name"=>"couchdb"}, + {"key"=>"postgresql", "service_name"=>"postgres"}, + {"key"=>"rabbitmq", "service_name"=>"rabbitmq"}, + {"key"=>"redis", "service_name"=>"redis"}, + {"key"=>"opscode-authz", "service_name"=>"opscode-authz"}, + {"key"=>"opscode-certificate", "service_name"=>"opscode-certificate"}, + {"key"=>"opscode-account", "service_name"=>"opscode-account"}, + {"key"=>"opscode-solr", "service_name"=>"opscode-solr"}, + {"key"=>"opscode-expander", "service_name"=>"opscode-expander"}, + {"key"=>"opscode-expander", "service_name"=>"opscode-expander-reindexer"}, + {"key"=>"opscode-org-creator", "service_name"=>"opscode-org-creator"}, + {"key"=>"opscode-chef", "service_name"=>"opscode-chef"}, + {"key"=>"opscode-erchef", "service_name"=>"opscode-erchef"}, + {"key"=>"opscode-webui", "service_name"=>"opscode-webui"}, + {"key"=>"nagios", "service_name"=>"php-fpm"}, + {"key"=>"nagios", "service_name"=>"fcgiwrap"}, + {"key"=>"nagios", "service_name"=>"nagios"}, + {"key"=>"nginx", "service_name"=>"nginx"}] + + +.. index:: + triple: configuration; keepalived; smtp_connect_timeout + +smtp_connect_timeout +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "30" + +*Example*: + +.. code-block:: ruby + + keepalived['smtp_connect_timeout'] = "30" + +.. index:: + triple: configuration; keepalived; smtp_server + +smtp_server +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + keepalived['smtp_server'] = "127.0.0.1" + +.. index:: + triple: configuration; keepalived; vrrp_instance_advert_int + +vrrp_instance_advert_int +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "1" + +*Example*: + +.. code-block:: ruby + + keepalived['vrrp_instance_advert_int'] = "1" + +.. index:: + triple: configuration; keepalived; vrrp_instance_interface + +vrrp_instance_interface +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "eth0" + +*Example*: + +.. code-block:: ruby + + keepalived['vrrp_instance_interface'] = "eth0" + +.. index:: + triple: configuration; keepalived; vrrp_instance_ipaddress + +vrrp_instance_ipaddress +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "192.168.4.131" + +*Example*: + +.. code-block:: ruby + + keepalived['vrrp_instance_ipaddress'] = "192.168.4.131" + +.. index:: + triple: configuration; keepalived; vrrp_instance_ipaddress_dev + +vrrp_instance_ipaddress_dev +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "eth0" + +*Example*: + +.. code-block:: ruby + + keepalived['vrrp_instance_ipaddress_dev'] = "eth0" + +.. index:: + triple: configuration; keepalived; vrrp_instance_password + +vrrp_instance_password +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "sneakybeaky" + +*Example*: + +.. code-block:: ruby + + keepalived['vrrp_instance_password'] = "sneakybeaky" + +.. index:: + triple: configuration; keepalived; vrrp_instance_priority + +vrrp_instance_priority +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "100" + +*Example*: + +.. code-block:: ruby + + keepalived['vrrp_instance_priority'] = "100" + +.. index:: + triple: configuration; keepalived; vrrp_instance_state + +vrrp_instance_state +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "MASTER" + +*Example*: + +.. code-block:: ruby + + keepalived['vrrp_instance_state'] = "MASTER" + +.. index:: + triple: configuration; keepalived; vrrp_instance_virtual_router_id + +vrrp_instance_virtual_router_id +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "1" + +*Example*: + +.. code-block:: ruby + + keepalived['vrrp_instance_virtual_router_id'] = "1" + +.. index:: + triple: configuration; keepalived; vrrp_sync_group + +vrrp_sync_group +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "PC_GROUP" + +*Example*: + +.. code-block:: ruby + + keepalived['vrrp_sync_group'] = "PC_GROUP" + +.. index:: + triple: configuration; keepalived; vrrp_sync_instance + +vrrp_sync_instance +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "PC_VI" + +*Example*: + +.. code-block:: ruby + + keepalived['vrrp_sync_instance'] = "PC_VI" + +.. index:: + pair: configuration; lb + +lb +------------------------------------------------ + +.. index:: + triple: configuration; lb; api_fqdn + +api_fqdn +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "ubuntu.localdomain" + +*Example*: + +.. code-block:: ruby + + lb['api_fqdn'] = "ubuntu.localdomain" + +.. index:: + triple: configuration; lb; cache_cookbook_files + +cache_cookbook_files +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + lb['cache_cookbook_files'] = false + +.. index:: + triple: configuration; lb; debug + +debug +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + lb['debug'] = false + +.. index:: + triple: configuration; lb; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + lb['enable'] = true + +.. index:: + triple: configuration; lb; upstream + +upstream +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + {"opscode-chef"=>["127.0.0.1"], + "opscode-erchef"=>["127.0.0.1"], + "opscode-account"=>["127.0.0.1"], + "opscode-webui"=>["127.0.0.1"], + "opscode-authz"=>["127.0.0.1"], + "opscode-solr"=>["127.0.0.1"]} + + +*Example*: + +.. code-block:: ruby + + lb['upstream'] = {"opscode-chef"=>["127.0.0.1"], + "opscode-erchef"=>["127.0.0.1"], + "opscode-account"=>["127.0.0.1"], + "opscode-webui"=>["127.0.0.1"], + "opscode-authz"=>["127.0.0.1"], + "opscode-solr"=>["127.0.0.1"]} + + +.. index:: + triple: configuration; lb; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + lb['vip'] = "127.0.0.1" + +.. index:: + triple: configuration; lb; web_ui_fqdn + +web_ui_fqdn +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "ubuntu.localdomain" + +*Example*: + +.. code-block:: ruby + + lb['web_ui_fqdn'] = "ubuntu.localdomain" + +.. index:: + pair: configuration; lb_internal + +lb_internal +------------------------------------------------ + +.. index:: + triple: configuration; lb_internal; account_port + +account_port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9685 + +*Example*: + +.. code-block:: ruby + + lb_internal['account_port'] = 9685 + +.. index:: + triple: configuration; lb_internal; authz_port + +authz_port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9683 + +*Example*: + +.. code-block:: ruby + + lb_internal['authz_port'] = 9683 + +.. index:: + triple: configuration; lb_internal; chef_port + +chef_port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9680 + +*Example*: + +.. code-block:: ruby + + lb_internal['chef_port'] = 9680 + +.. index:: + triple: configuration; lb_internal; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + lb_internal['enable'] = true + +.. index:: + triple: configuration; lb_internal; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + lb_internal['vip'] = "127.0.0.1" + +.. index:: + pair: configuration; mysql + +mysql +------------------------------------------------ + +.. index:: + triple: configuration; mysql; destructive_migrate + +destructive_migrate +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + mysql['destructive_migrate'] = false + +.. index:: + triple: configuration; mysql; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + mysql['enable'] = false + +.. index:: + triple: configuration; mysql; install_libs + +install_libs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + mysql['install_libs'] = true + +.. index:: + triple: configuration; mysql; sql_password + +sql_password +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "snakepliskin" + +*Example*: + +.. code-block:: ruby + + mysql['sql_password'] = "snakepliskin" + +.. index:: + triple: configuration; mysql; sql_user + +sql_user +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "opscode_chef" + +*Example*: + +.. code-block:: ruby + + mysql['sql_user'] = "opscode_chef" + +.. index:: + triple: configuration; mysql; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + mysql['vip'] = "127.0.0.1" + +.. index:: + pair: configuration; nagios + +nagios +------------------------------------------------ + +.. index:: + triple: configuration; nagios; admin_email + +admin_email +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "nobody@example.com" + +*Example*: + +.. code-block:: ruby + + nagios['admin_email'] = "nobody@example.com" + +.. index:: + triple: configuration; nagios; admin_pager + +admin_pager +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "nobody@example.com" + +*Example*: + +.. code-block:: ruby + + nagios['admin_pager'] = "nobody@example.com" + +.. index:: + triple: configuration; nagios; admin_password + +admin_password +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "privatechef" + +*Example*: + +.. code-block:: ruby + + nagios['admin_password'] = "privatechef" + +.. index:: + triple: configuration; nagios; admin_user + +admin_user +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "nagiosadmin" + +*Example*: + +.. code-block:: ruby + + nagios['admin_user'] = "nagiosadmin" + +.. index:: + triple: configuration; nagios; alert_email + +alert_email +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "nobody@example.com" + +*Example*: + +.. code-block:: ruby + + nagios['alert_email'] = "nobody@example.com" + +.. index:: + triple: configuration; nagios; debug_level + +debug_level +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 0 + +*Example*: + +.. code-block:: ruby + + nagios['debug_level'] = 0 + +.. index:: + triple: configuration; nagios; debug_verbosity + +debug_verbosity +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 1 + +*Example*: + +.. code-block:: ruby + + nagios['debug_verbosity'] = 1 + +.. index:: + triple: configuration; nagios; default_host + +default_host +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + {"check_interval"=>15, + "retry_interval"=>15, + "max_check_attempts"=>1, + "notification_interval"=>300} + + +*Example*: + +.. code-block:: ruby + + nagios['default_host'] = {"check_interval"=>15, + "retry_interval"=>15, + "max_check_attempts"=>1, + "notification_interval"=>300} + + +.. index:: + triple: configuration; nagios; default_service + +default_service +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + {"check_interval"=>60, + "retry_interval"=>15, + "max_check_attempts"=>3, + "notification_interval"=>1200} + + +*Example*: + +.. code-block:: ruby + + nagios['default_service'] = {"check_interval"=>60, + "retry_interval"=>15, + "max_check_attempts"=>3, + "notification_interval"=>1200} + + +.. index:: + triple: configuration; nagios; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/nagios" + +*Example*: + +.. code-block:: ruby + + nagios['dir'] = "/var/opt/opscode/nagios" + +.. index:: + triple: configuration; nagios; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + nagios['enable'] = true + +.. index:: + triple: configuration; nagios; fcgiwrap_log_directory + +fcgiwrap_log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/fcgiwrap" + +*Example*: + +.. code-block:: ruby + + nagios['fcgiwrap_log_directory'] = "/var/log/opscode/fcgiwrap" + +.. index:: + triple: configuration; nagios; fcgiwrap_port + +fcgiwrap_port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9670 + +*Example*: + +.. code-block:: ruby + + nagios['fcgiwrap_port'] = 9670 + +.. index:: + triple: configuration; nagios; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + nagios['ha'] = false + +.. index:: + triple: configuration; nagios; hosts + +hosts +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + {"ubuntu"=>{"ipaddress"=>"192.168.4.131", "hostgroups"=>[]}} + + +*Example*: + +.. code-block:: ruby + + nagios['hosts'] = {"ubuntu"=>{"ipaddress"=>"192.168.4.131", "hostgroups"=>[]}} + + +.. index:: + triple: configuration; nagios; interval_length + +interval_length +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 1 + +*Example*: + +.. code-block:: ruby + + nagios['interval_length'] = 1 + +.. index:: + triple: configuration; nagios; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/nagios" + +*Example*: + +.. code-block:: ruby + + nagios['log_directory'] = "/var/log/opscode/nagios" + +.. index:: + triple: configuration; nagios; php_fpm_log_directory + +php_fpm_log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/php-fpm" + +*Example*: + +.. code-block:: ruby + + nagios['php_fpm_log_directory'] = "/var/log/opscode/php-fpm" + +.. index:: + triple: configuration; nagios; php_fpm_port + +php_fpm_port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9000 + +*Example*: + +.. code-block:: ruby + + nagios['php_fpm_port'] = 9000 + +.. index:: + triple: configuration; nagios; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9671 + +*Example*: + +.. code-block:: ruby + + nagios['port'] = 9671 + +.. index:: + pair: configuration; nginx + +nginx +------------------------------------------------ + +.. index:: + triple: configuration; nginx; cache_max_size + +cache_max_size +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "5000m" + +*Example*: + +.. code-block:: ruby + + nginx['cache_max_size'] = "5000m" + +.. index:: + triple: configuration; nginx; client_max_body_size + +client_max_body_size +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "250m" + +*Example*: + +.. code-block:: ruby + + nginx['client_max_body_size'] = "250m" + +.. index:: + triple: configuration; nginx; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/nginx" + +*Example*: + +.. code-block:: ruby + + nginx['dir'] = "/var/opt/opscode/nginx" + +.. index:: + triple: configuration; nginx; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + nginx['enable'] = true + +.. index:: + triple: configuration; nginx; gzip + +gzip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "on" + +*Example*: + +.. code-block:: ruby + + nginx['gzip'] = "on" + +.. index:: + triple: configuration; nginx; gzip_comp_level + +gzip_comp_level +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "2" + +*Example*: + +.. code-block:: ruby + + nginx['gzip_comp_level'] = "2" + +.. index:: + triple: configuration; nginx; gzip_http_version + +gzip_http_version +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "1.0" + +*Example*: + +.. code-block:: ruby + + nginx['gzip_http_version'] = "1.0" + +.. index:: + triple: configuration; nginx; gzip_proxied + +gzip_proxied +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "any" + +*Example*: + +.. code-block:: ruby + + nginx['gzip_proxied'] = "any" + +.. index:: + triple: configuration; nginx; gzip_types + +gzip_types +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + ["text/plain", + "text/css", + "application/x-javascript", + "text/xml", + "application/xml", + "application/xml+rss", + "text/javascript"] + + +*Example*: + +.. code-block:: ruby + + nginx['gzip_types'] = ["text/plain", + "text/css", + "application/x-javascript", + "text/xml", + "application/xml", + "application/xml+rss", + "text/javascript"] + + +.. index:: + triple: configuration; nginx; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + nginx['ha'] = false + +.. index:: + triple: configuration; nginx; keepalive_timeout + +keepalive_timeout +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 65 + +*Example*: + +.. code-block:: ruby + + nginx['keepalive_timeout'] = 65 + +.. index:: + triple: configuration; nginx; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/nginx" + +*Example*: + +.. code-block:: ruby + + nginx['log_directory'] = "/var/log/opscode/nginx" + +.. index:: + triple: configuration; nginx; sendfile + +sendfile +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "on" + +*Example*: + +.. code-block:: ruby + + nginx['sendfile'] = "on" + +.. index:: + triple: configuration; nginx; server_name + +server_name +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "ubuntu.localdomain" + +*Example*: + +.. code-block:: ruby + + nginx['server_name'] = "ubuntu.localdomain" + +.. index:: + triple: configuration; nginx; ssl_certificate + +ssl_certificate +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + nil + +*Example*: + +.. code-block:: ruby + + nginx['ssl_certificate'] = nil + +.. index:: + triple: configuration; nginx; ssl_certificate_key + +ssl_certificate_key +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + nil + +*Example*: + +.. code-block:: ruby + + nginx['ssl_certificate_key'] = nil + +.. index:: + triple: configuration; nginx; ssl_ciphers + +ssl_ciphers +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "RC4-SHA:RC4-MD5:RC4:RSA:HIGH:MEDIUM:!LOW:!kEDH:!aNULL:!ADH:!eNULL:!EXP:!SSLv2:!SEED:!CAMELLIA:!PSK" + +*Example*: + +.. code-block:: ruby + + nginx['ssl_ciphers'] = "RC4-SHA:RC4-MD5:RC4:RSA:HIGH:MEDIUM:!LOW:!kEDH:!aNULL:!ADH:!eNULL:!EXP:!SSLv2:!SEED:!CAMELLIA:!PSK" + +.. index:: + triple: configuration; nginx; ssl_company_name + +ssl_company_name +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "YouCorp" + +*Example*: + +.. code-block:: ruby + + nginx['ssl_company_name'] = "YouCorp" + +.. index:: + triple: configuration; nginx; ssl_country_name + +ssl_country_name +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "US" + +*Example*: + +.. code-block:: ruby + + nginx['ssl_country_name'] = "US" + +.. index:: + triple: configuration; nginx; ssl_email_address + +ssl_email_address +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "you@example.com" + +*Example*: + +.. code-block:: ruby + + nginx['ssl_email_address'] = "you@example.com" + +.. index:: + triple: configuration; nginx; ssl_locality_name + +ssl_locality_name +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "Seattle" + +*Example*: + +.. code-block:: ruby + + nginx['ssl_locality_name'] = "Seattle" + +.. index:: + triple: configuration; nginx; ssl_organizational_unit_name + +ssl_organizational_unit_name +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "Operations" + +*Example*: + +.. code-block:: ruby + + nginx['ssl_organizational_unit_name'] = "Operations" + +.. index:: + triple: configuration; nginx; ssl_port + +ssl_port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 443 + +*Example*: + +.. code-block:: ruby + + nginx['ssl_port'] = 443 + +.. index:: + triple: configuration; nginx; ssl_protocols + +ssl_protocols +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "SSLv3 TLSv1" + +*Example*: + +.. code-block:: ruby + + nginx['ssl_protocols'] = "SSLv3 TLSv1" + +.. index:: + triple: configuration; nginx; ssl_state_name + +ssl_state_name +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "WA" + +*Example*: + +.. code-block:: ruby + + nginx['ssl_state_name'] = "WA" + +.. index:: + triple: configuration; nginx; tcp_nodelay + +tcp_nodelay +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "on" + +*Example*: + +.. code-block:: ruby + + nginx['tcp_nodelay'] = "on" + +.. index:: + triple: configuration; nginx; tcp_nopush + +tcp_nopush +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "on" + +*Example*: + +.. code-block:: ruby + + nginx['tcp_nopush'] = "on" + +.. index:: + triple: configuration; nginx; url + +url +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "https://ubuntu.localdomain" + +*Example*: + +.. code-block:: ruby + + nginx['url'] = "https://ubuntu.localdomain" + +.. index:: + triple: configuration; nginx; worker_connections + +worker_connections +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 10240 + +*Example*: + +.. code-block:: ruby + + nginx['worker_connections'] = 10240 + +.. index:: + triple: configuration; nginx; worker_processes + +worker_processes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 4 + +*Example*: + +.. code-block:: ruby + + nginx['worker_processes'] = 4 + +.. index:: + pair: configuration; notification_email + +notification_email +------------------------------------------------ + +.. index:: + triple: configuration; general options; notification_email + +notification_email +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + pc-default@opscode.com + +*Example*: + +.. code-block:: ruby + + notification_email "pc-default@opscode.com" + +.. index:: + pair: configuration; nrpe + +nrpe +------------------------------------------------ + +.. index:: + triple: configuration; nrpe; allowed_hosts + +allowed_hosts +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + ["127.0.0.1", "192.168.4.131"] + + +*Example*: + +.. code-block:: ruby + + nrpe['allowed_hosts'] = ["127.0.0.1", "192.168.4.131"] + + +.. index:: + triple: configuration; nrpe; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/nrpe" + +*Example*: + +.. code-block:: ruby + + nrpe['dir'] = "/var/opt/opscode/nrpe" + +.. index:: + triple: configuration; nrpe; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + nrpe['enable'] = true + +.. index:: + triple: configuration; nrpe; listen + +listen +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "192.168.4.131" + +*Example*: + +.. code-block:: ruby + + nrpe['listen'] = "192.168.4.131" + +.. index:: + triple: configuration; nrpe; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/nrpe" + +*Example*: + +.. code-block:: ruby + + nrpe['log_directory'] = "/var/log/opscode/nrpe" + +.. index:: + triple: configuration; nrpe; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9672 + +*Example*: + +.. code-block:: ruby + + nrpe['port'] = 9672 + +.. index:: + pair: configuration; opscode_account + +opscode_account +------------------------------------------------ + +.. index:: + triple: configuration; opscode_account; backlog + +backlog +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 1024 + +*Example*: + +.. code-block:: ruby + + opscode_account['backlog'] = 1024 + +.. index:: + triple: configuration; opscode_account; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/opscode-account" + +*Example*: + +.. code-block:: ruby + + opscode_account['dir'] = "/var/opt/opscode/opscode-account" + +.. index:: + triple: configuration; opscode_account; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + opscode_account['enable'] = true + +.. index:: + triple: configuration; opscode_account; environment + +environment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "privatechef" + +*Example*: + +.. code-block:: ruby + + opscode_account['environment'] = "privatechef" + +.. index:: + triple: configuration; opscode_account; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + opscode_account['ha'] = false + +.. index:: + triple: configuration; opscode_account; listen + +listen +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1:9465" + +*Example*: + +.. code-block:: ruby + + opscode_account['listen'] = "127.0.0.1:9465" + +.. index:: + triple: configuration; opscode_account; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/opscode-account" + +*Example*: + +.. code-block:: ruby + + opscode_account['log_directory'] = "/var/log/opscode/opscode-account" + +.. index:: + triple: configuration; opscode_account; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9465 + +*Example*: + +.. code-block:: ruby + + opscode_account['port'] = 9465 + +.. index:: + triple: configuration; opscode_account; proxy_user + +proxy_user +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "pivotal" + +*Example*: + +.. code-block:: ruby + + opscode_account['proxy_user'] = "pivotal" + +.. index:: + triple: configuration; opscode_account; session_secret_key + +session_secret_key +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "change-by-default" + +*Example*: + +.. code-block:: ruby + + opscode_account['session_secret_key'] = "change-by-default" + +.. index:: + triple: configuration; opscode_account; tcp_nodelay + +tcp_nodelay +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + opscode_account['tcp_nodelay'] = true + +.. index:: + triple: configuration; opscode_account; umask + +umask +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "0022" + +*Example*: + +.. code-block:: ruby + + opscode_account['umask'] = "0022" + +.. index:: + triple: configuration; opscode_account; url + +url +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "http://127.0.0.1:9465" + +*Example*: + +.. code-block:: ruby + + opscode_account['url'] = "http://127.0.0.1:9465" + +.. index:: + triple: configuration; opscode_account; validation_client_name + +validation_client_name +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "chef" + +*Example*: + +.. code-block:: ruby + + opscode_account['validation_client_name'] = "chef" + +.. index:: + triple: configuration; opscode_account; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + opscode_account['vip'] = "127.0.0.1" + +.. index:: + triple: configuration; opscode_account; worker_processes + +worker_processes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 4 + +*Example*: + +.. code-block:: ruby + + opscode_account['worker_processes'] = 4 + +.. index:: + triple: configuration; opscode_account; worker_timeout + +worker_timeout +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 3600 + +*Example*: + +.. code-block:: ruby + + opscode_account['worker_timeout'] = 3600 + +.. index:: + pair: configuration; opscode_authz + +opscode_authz +------------------------------------------------ + +.. index:: + triple: configuration; opscode_authz; caching + +caching +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "enabled" + +*Example*: + +.. code-block:: ruby + + opscode_authz['caching'] = "enabled" + +.. index:: + triple: configuration; opscode_authz; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/opscode-authz" + +*Example*: + +.. code-block:: ruby + + opscode_authz['dir'] = "/var/opt/opscode/opscode-authz" + +.. index:: + triple: configuration; opscode_authz; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + opscode_authz['enable'] = true + +.. index:: + triple: configuration; opscode_authz; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + opscode_authz['ha'] = false + +.. index:: + triple: configuration; opscode_authz; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/opscode-authz" + +*Example*: + +.. code-block:: ruby + + opscode_authz['log_directory'] = "/var/log/opscode/opscode-authz" + +.. index:: + triple: configuration; opscode_authz; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9463 + +*Example*: + +.. code-block:: ruby + + opscode_authz['port'] = 9463 + +.. index:: + triple: configuration; opscode_authz; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + opscode_authz['vip'] = "127.0.0.1" + +.. index:: + pair: configuration; opscode_certificate + +opscode_certificate +------------------------------------------------ + +.. index:: + triple: configuration; opscode_certificate; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/opscode-certificate" + +*Example*: + +.. code-block:: ruby + + opscode_certificate['dir'] = "/var/opt/opscode/opscode-certificate" + +.. index:: + triple: configuration; opscode_certificate; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + opscode_certificate['enable'] = true + +.. index:: + triple: configuration; opscode_certificate; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + opscode_certificate['ha'] = false + +.. index:: + triple: configuration; opscode_certificate; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/opscode-certificate" + +*Example*: + +.. code-block:: ruby + + opscode_certificate['log_directory'] = "/var/log/opscode/opscode-certificate" + +.. index:: + triple: configuration; opscode_certificate; num_certificates_per_worker + +num_certificates_per_worker +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "50" + +*Example*: + +.. code-block:: ruby + + opscode_certificate['num_certificates_per_worker'] = "50" + +.. index:: + triple: configuration; opscode_certificate; num_workers + +num_workers +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "2" + +*Example*: + +.. code-block:: ruby + + opscode_certificate['num_workers'] = "2" + +.. index:: + triple: configuration; opscode_certificate; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 5140 + +*Example*: + +.. code-block:: ruby + + opscode_certificate['port'] = 5140 + +.. index:: + triple: configuration; opscode_certificate; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + opscode_certificate['vip'] = "127.0.0.1" + +.. index:: + pair: configuration; opscode_chef + +opscode_chef +------------------------------------------------ + +.. index:: + triple: configuration; opscode_chef; backlog + +backlog +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 1024 + +*Example*: + +.. code-block:: ruby + + opscode_chef['backlog'] = 1024 + +.. index:: + triple: configuration; opscode_chef; checksum_path + +checksum_path +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/opscode-chef/checksum" + +*Example*: + +.. code-block:: ruby + + opscode_chef['checksum_path'] = "/var/opt/opscode/opscode-chef/checksum" + +.. index:: + triple: configuration; opscode_chef; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/opscode-chef" + +*Example*: + +.. code-block:: ruby + + opscode_chef['dir'] = "/var/opt/opscode/opscode-chef" + +.. index:: + triple: configuration; opscode_chef; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + opscode_chef['enable'] = true + +.. index:: + triple: configuration; opscode_chef; environment + +environment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "privatechef" + +*Example*: + +.. code-block:: ruby + + opscode_chef['environment'] = "privatechef" + +.. index:: + triple: configuration; opscode_chef; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + opscode_chef['ha'] = false + +.. index:: + triple: configuration; opscode_chef; listen + +listen +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1:9460" + +*Example*: + +.. code-block:: ruby + + opscode_chef['listen'] = "127.0.0.1:9460" + +.. index:: + triple: configuration; opscode_chef; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/opscode-chef" + +*Example*: + +.. code-block:: ruby + + opscode_chef['log_directory'] = "/var/log/opscode/opscode-chef" + +.. index:: + triple: configuration; opscode_chef; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9460 + +*Example*: + +.. code-block:: ruby + + opscode_chef['port'] = 9460 + +.. index:: + triple: configuration; opscode_chef; proxy_user + +proxy_user +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "pivotal" + +*Example*: + +.. code-block:: ruby + + opscode_chef['proxy_user'] = "pivotal" + +.. index:: + triple: configuration; opscode_chef; sandbox_path + +sandbox_path +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/opscode-chef/sandbox" + +*Example*: + +.. code-block:: ruby + + opscode_chef['sandbox_path'] = "/var/opt/opscode/opscode-chef/sandbox" + +.. index:: + triple: configuration; opscode_chef; tcp_nodelay + +tcp_nodelay +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + opscode_chef['tcp_nodelay'] = true + +.. index:: + triple: configuration; opscode_chef; umask + +umask +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "0022" + +*Example*: + +.. code-block:: ruby + + opscode_chef['umask'] = "0022" + +.. index:: + triple: configuration; opscode_chef; upload_internal_port + +upload_internal_port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9460 + +*Example*: + +.. code-block:: ruby + + opscode_chef['upload_internal_port'] = 9460 + +.. index:: + triple: configuration; opscode_chef; upload_internal_proto + +upload_internal_proto +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "http" + +*Example*: + +.. code-block:: ruby + + opscode_chef['upload_internal_proto'] = "http" + +.. index:: + triple: configuration; opscode_chef; upload_internal_vip + +upload_internal_vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + opscode_chef['upload_internal_vip'] = "127.0.0.1" + +.. index:: + triple: configuration; opscode_chef; upload_port + +upload_port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9460 + +*Example*: + +.. code-block:: ruby + + opscode_chef['upload_port'] = 9460 + +.. index:: + triple: configuration; opscode_chef; upload_proto + +upload_proto +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "http" + +*Example*: + +.. code-block:: ruby + + opscode_chef['upload_proto'] = "http" + +.. index:: + triple: configuration; opscode_chef; upload_vip + +upload_vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + opscode_chef['upload_vip'] = "127.0.0.1" + +.. index:: + triple: configuration; opscode_chef; url + +url +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "http://127.0.0.1:9460" + +*Example*: + +.. code-block:: ruby + + opscode_chef['url'] = "http://127.0.0.1:9460" + +.. index:: + triple: configuration; opscode_chef; validation_client_name + +validation_client_name +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "chef" + +*Example*: + +.. code-block:: ruby + + opscode_chef['validation_client_name'] = "chef" + +.. index:: + triple: configuration; opscode_chef; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + opscode_chef['vip'] = "127.0.0.1" + +.. index:: + triple: configuration; opscode_chef; web_ui_admin_default_password + +web_ui_admin_default_password +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "p@ssw0rd1" + +*Example*: + +.. code-block:: ruby + + opscode_chef['web_ui_admin_default_password'] = "p@ssw0rd1" + +.. index:: + triple: configuration; opscode_chef; web_ui_admin_user_name + +web_ui_admin_user_name +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "admin" + +*Example*: + +.. code-block:: ruby + + opscode_chef['web_ui_admin_user_name'] = "admin" + +.. index:: + triple: configuration; opscode_chef; web_ui_client_name + +web_ui_client_name +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "chef-webui" + +*Example*: + +.. code-block:: ruby + + opscode_chef['web_ui_client_name'] = "chef-webui" + +.. index:: + triple: configuration; opscode_chef; worker_processes + +worker_processes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 4 + +*Example*: + +.. code-block:: ruby + + opscode_chef['worker_processes'] = 4 + +.. index:: + triple: configuration; opscode_chef; worker_timeout + +worker_timeout +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 3600 + +*Example*: + +.. code-block:: ruby + + opscode_chef['worker_timeout'] = 3600 + +.. index:: + pair: configuration; opscode_erchef + +opscode_erchef +------------------------------------------------ + +.. index:: + triple: configuration; opscode_erchef; auth_skew + +auth_skew +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "900" + +*Example*: + +.. code-block:: ruby + + opscode_erchef['auth_skew'] = "900" + +.. index:: + triple: configuration; opscode_erchef; bulk_fetch_batch_size + +bulk_fetch_batch_size +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "5" + +*Example*: + +.. code-block:: ruby + + opscode_erchef['bulk_fetch_batch_size'] = "5" + +.. index:: + triple: configuration; opscode_erchef; cache_ttl + +cache_ttl +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "3600" + +*Example*: + +.. code-block:: ruby + + opscode_erchef['cache_ttl'] = "3600" + +.. index:: + triple: configuration; opscode_erchef; couchdb_max_conn + +couchdb_max_conn +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "100" + +*Example*: + +.. code-block:: ruby + + opscode_erchef['couchdb_max_conn'] = "100" + +.. index:: + triple: configuration; opscode_erchef; db_pool_size + +db_pool_size +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "20" + +*Example*: + +.. code-block:: ruby + + opscode_erchef['db_pool_size'] = "20" + +.. index:: + triple: configuration; opscode_erchef; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/opscode-erchef" + +*Example*: + +.. code-block:: ruby + + opscode_erchef['dir'] = "/var/opt/opscode/opscode-erchef" + +.. index:: + triple: configuration; opscode_erchef; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + opscode_erchef['enable'] = true + +.. index:: + triple: configuration; opscode_erchef; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + opscode_erchef['ha'] = false + +.. index:: + triple: configuration; opscode_erchef; listen + +listen +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + opscode_erchef['listen'] = "127.0.0.1" + +.. index:: + triple: configuration; opscode_erchef; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/opscode-erchef" + +*Example*: + +.. code-block:: ruby + + opscode_erchef['log_directory'] = "/var/log/opscode/opscode-erchef" + +.. index:: + triple: configuration; opscode_erchef; max_cache_size + +max_cache_size +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "10000" + +*Example*: + +.. code-block:: ruby + + opscode_erchef['max_cache_size'] = "10000" + +.. index:: + triple: configuration; opscode_erchef; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 8000 + +*Example*: + +.. code-block:: ruby + + opscode_erchef['port'] = 8000 + +.. index:: + triple: configuration; opscode_erchef; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + opscode_erchef['vip'] = "127.0.0.1" + +.. index:: + pair: configuration; opscode_expander + +opscode_expander +------------------------------------------------ + +.. index:: + triple: configuration; opscode_expander; consumer_id + +consumer_id +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "default" + +*Example*: + +.. code-block:: ruby + + opscode_expander['consumer_id'] = "default" + +.. index:: + triple: configuration; opscode_expander; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/opscode-expander" + +*Example*: + +.. code-block:: ruby + + opscode_expander['dir'] = "/var/opt/opscode/opscode-expander" + +.. index:: + triple: configuration; opscode_expander; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + opscode_expander['enable'] = true + +.. index:: + triple: configuration; opscode_expander; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + opscode_expander['ha'] = false + +.. index:: + triple: configuration; opscode_expander; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/opscode-expander" + +*Example*: + +.. code-block:: ruby + + opscode_expander['log_directory'] = "/var/log/opscode/opscode-expander" + +.. index:: + triple: configuration; opscode_expander; nodes + +nodes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 2 + +*Example*: + +.. code-block:: ruby + + opscode_expander['nodes'] = 2 + +.. index:: + triple: configuration; opscode_expander; reindexer_log_directory + +reindexer_log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/opscode-expander-reindexer" + +*Example*: + +.. code-block:: ruby + + opscode_expander['reindexer_log_directory'] = "/var/log/opscode/opscode-expander-reindexer" + +.. index:: + pair: configuration; opscode_org_creator + +opscode_org_creator +------------------------------------------------ + +.. index:: + triple: configuration; opscode_org_creator; create_splay_ms + +create_splay_ms +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 25000 + +*Example*: + +.. code-block:: ruby + + opscode_org_creator['create_splay_ms'] = 25000 + +.. index:: + triple: configuration; opscode_org_creator; create_wait_ms + +create_wait_ms +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 30000 + +*Example*: + +.. code-block:: ruby + + opscode_org_creator['create_wait_ms'] = 30000 + +.. index:: + triple: configuration; opscode_org_creator; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/opscode-org-creator" + +*Example*: + +.. code-block:: ruby + + opscode_org_creator['dir'] = "/var/opt/opscode/opscode-org-creator" + +.. index:: + triple: configuration; opscode_org_creator; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + opscode_org_creator['enable'] = true + +.. index:: + triple: configuration; opscode_org_creator; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + opscode_org_creator['ha'] = false + +.. index:: + triple: configuration; opscode_org_creator; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/opscode-org-creator" + +*Example*: + +.. code-block:: ruby + + opscode_org_creator['log_directory'] = "/var/log/opscode/opscode-org-creator" + +.. index:: + triple: configuration; opscode_org_creator; max_workers + +max_workers +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 1 + +*Example*: + +.. code-block:: ruby + + opscode_org_creator['max_workers'] = 1 + +.. index:: + triple: configuration; opscode_org_creator; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 4369 + +*Example*: + +.. code-block:: ruby + + opscode_org_creator['port'] = 4369 + +.. index:: + triple: configuration; opscode_org_creator; ready_org_depth + +ready_org_depth +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 10 + +*Example*: + +.. code-block:: ruby + + opscode_org_creator['ready_org_depth'] = 10 + +.. index:: + pair: configuration; opscode_solr + +opscode_solr +------------------------------------------------ + +.. index:: + triple: configuration; opscode_solr; commit_interval + +commit_interval +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 60000 + +*Example*: + +.. code-block:: ruby + + opscode_solr['commit_interval'] = 60000 + +.. index:: + triple: configuration; opscode_solr; data_dir + +data_dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/opscode-solr/data" + +*Example*: + +.. code-block:: ruby + + opscode_solr['data_dir'] = "/var/opt/opscode/opscode-solr/data" + +.. index:: + triple: configuration; opscode_solr; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/opscode-solr" + +*Example*: + +.. code-block:: ruby + + opscode_solr['dir'] = "/var/opt/opscode/opscode-solr" + +.. index:: + triple: configuration; opscode_solr; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + opscode_solr['enable'] = true + +.. index:: + triple: configuration; opscode_solr; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + opscode_solr['ha'] = false + +.. index:: + triple: configuration; opscode_solr; heap_size + +heap_size +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "256M" + +*Example*: + +.. code-block:: ruby + + opscode_solr['heap_size'] = "256M" + +.. index:: + triple: configuration; opscode_solr; ip_address + +ip_address +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + opscode_solr['ip_address'] = "127.0.0.1" + +.. index:: + triple: configuration; opscode_solr; java_opts + +java_opts +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "" + +*Example*: + +.. code-block:: ruby + + opscode_solr['java_opts'] = "" + +.. index:: + triple: configuration; opscode_solr; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/opscode-solr" + +*Example*: + +.. code-block:: ruby + + opscode_solr['log_directory'] = "/var/log/opscode/opscode-solr" + +.. index:: + triple: configuration; opscode_solr; max_commit_docs + +max_commit_docs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 1000 + +*Example*: + +.. code-block:: ruby + + opscode_solr['max_commit_docs'] = 1000 + +.. index:: + triple: configuration; opscode_solr; max_field_length + +max_field_length +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 100000 + +*Example*: + +.. code-block:: ruby + + opscode_solr['max_field_length'] = 100000 + +.. index:: + triple: configuration; opscode_solr; max_merge_docs + +max_merge_docs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 2147483647 + +*Example*: + +.. code-block:: ruby + + opscode_solr['max_merge_docs'] = 2147483647 + +.. index:: + triple: configuration; opscode_solr; merge_factor + +merge_factor +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 100 + +*Example*: + +.. code-block:: ruby + + opscode_solr['merge_factor'] = 100 + +.. index:: + triple: configuration; opscode_solr; poll_seconds + +poll_seconds +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 20 + +*Example*: + +.. code-block:: ruby + + opscode_solr['poll_seconds'] = 20 + +.. index:: + triple: configuration; opscode_solr; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 8983 + +*Example*: + +.. code-block:: ruby + + opscode_solr['port'] = 8983 + +.. index:: + triple: configuration; opscode_solr; ram_buffer_size + +ram_buffer_size +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 200 + +*Example*: + +.. code-block:: ruby + + opscode_solr['ram_buffer_size'] = 200 + +.. index:: + triple: configuration; opscode_solr; url + +url +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "http://localhost:8983" + +*Example*: + +.. code-block:: ruby + + opscode_solr['url'] = "http://localhost:8983" + +.. index:: + triple: configuration; opscode_solr; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + opscode_solr['vip'] = "127.0.0.1" + +.. index:: + pair: configuration; opscode_webui + +opscode_webui +------------------------------------------------ + +.. index:: + triple: configuration; opscode_webui; backlog + +backlog +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 1024 + +*Example*: + +.. code-block:: ruby + + opscode_webui['backlog'] = 1024 + +.. index:: + triple: configuration; opscode_webui; cookie_domain + +cookie_domain +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "all" + +*Example*: + +.. code-block:: ruby + + opscode_webui['cookie_domain'] = "all" + +.. index:: + triple: configuration; opscode_webui; cookie_secret + +cookie_secret +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "47b3b8d95dea455baf32155e95d1e64e" + +*Example*: + +.. code-block:: ruby + + opscode_webui['cookie_secret'] = "47b3b8d95dea455baf32155e95d1e64e" + +.. index:: + triple: configuration; opscode_webui; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/opscode-webui" + +*Example*: + +.. code-block:: ruby + + opscode_webui['dir'] = "/var/opt/opscode/opscode-webui" + +.. index:: + triple: configuration; opscode_webui; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + opscode_webui['enable'] = true + +.. index:: + triple: configuration; opscode_webui; environment + +environment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "privatechef" + +*Example*: + +.. code-block:: ruby + + opscode_webui['environment'] = "privatechef" + +.. index:: + triple: configuration; opscode_webui; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + opscode_webui['ha'] = false + +.. index:: + triple: configuration; opscode_webui; listen + +listen +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1:9462" + +*Example*: + +.. code-block:: ruby + + opscode_webui['listen'] = "127.0.0.1:9462" + +.. index:: + triple: configuration; opscode_webui; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/opscode-webui" + +*Example*: + +.. code-block:: ruby + + opscode_webui['log_directory'] = "/var/log/opscode/opscode-webui" + +.. index:: + triple: configuration; opscode_webui; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 9462 + +*Example*: + +.. code-block:: ruby + + opscode_webui['port'] = 9462 + +.. index:: + triple: configuration; opscode_webui; session_key + +session_key +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "_sandbox_session" + +*Example*: + +.. code-block:: ruby + + opscode_webui['session_key'] = "_sandbox_session" + +.. index:: + triple: configuration; opscode_webui; tcp_nodelay + +tcp_nodelay +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + opscode_webui['tcp_nodelay'] = true + +.. index:: + triple: configuration; opscode_webui; umask + +umask +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "0022" + +*Example*: + +.. code-block:: ruby + + opscode_webui['umask'] = "0022" + +.. index:: + triple: configuration; opscode_webui; url + +url +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "http://127.0.0.1:9462" + +*Example*: + +.. code-block:: ruby + + opscode_webui['url'] = "http://127.0.0.1:9462" + +.. index:: + triple: configuration; opscode_webui; validation_client_name + +validation_client_name +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "chef" + +*Example*: + +.. code-block:: ruby + + opscode_webui['validation_client_name'] = "chef" + +.. index:: + triple: configuration; opscode_webui; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + opscode_webui['vip'] = "127.0.0.1" + +.. index:: + triple: configuration; opscode_webui; worker_processes + +worker_processes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 4 + +*Example*: + +.. code-block:: ruby + + opscode_webui['worker_processes'] = 4 + +.. index:: + triple: configuration; opscode_webui; worker_timeout + +worker_timeout +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 3600 + +*Example*: + +.. code-block:: ruby + + opscode_webui['worker_timeout'] = 3600 + +.. index:: + pair: configuration; postgresql + +postgresql +------------------------------------------------ + +.. index:: + triple: configuration; postgresql; data_dir + +data_dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/postgresql/data" + +*Example*: + +.. code-block:: ruby + + postgresql['data_dir'] = "/var/opt/opscode/postgresql/data" + +.. index:: + triple: configuration; postgresql; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/postgresql" + +*Example*: + +.. code-block:: ruby + + postgresql['dir'] = "/var/opt/opscode/postgresql" + +.. index:: + triple: configuration; postgresql; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + postgresql['enable'] = true + +.. index:: + triple: configuration; postgresql; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + postgresql['ha'] = false + +.. index:: + triple: configuration; postgresql; home + +home +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/opt/opscode/embedded" + +*Example*: + +.. code-block:: ruby + + postgresql['home'] = "/opt/opscode/embedded" + +.. index:: + triple: configuration; postgresql; listen_address + +listen_address +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "localhost" + +*Example*: + +.. code-block:: ruby + + postgresql['listen_address'] = "localhost" + +.. index:: + triple: configuration; postgresql; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/postgresql" + +*Example*: + +.. code-block:: ruby + + postgresql['log_directory'] = "/var/log/opscode/postgresql" + +.. index:: + triple: configuration; postgresql; max_connections + +max_connections +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 200 + +*Example*: + +.. code-block:: ruby + + postgresql['max_connections'] = 200 + +.. index:: + triple: configuration; postgresql; md5_auth_cidr_addresses + +md5_auth_cidr_addresses +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + [] + + +*Example*: + +.. code-block:: ruby + + postgresql['md5_auth_cidr_addresses'] = [] + + +.. index:: + triple: configuration; postgresql; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 5432 + +*Example*: + +.. code-block:: ruby + + postgresql['port'] = 5432 + +.. index:: + triple: configuration; postgresql; shell + +shell +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/bin/sh" + +*Example*: + +.. code-block:: ruby + + postgresql['shell'] = "/bin/sh" + +.. index:: + triple: configuration; postgresql; shmall + +shmall +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 4194304 + +*Example*: + +.. code-block:: ruby + + postgresql['shmall'] = 4194304 + +.. index:: + triple: configuration; postgresql; shmmax + +shmmax +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + 17179869184 + +*Example*: + +.. code-block:: ruby + + postgresql['shmmax'] = 17179869184 + +.. index:: + triple: configuration; postgresql; sql_password + +sql_password +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "snakepliskin" + +*Example*: + +.. code-block:: ruby + + postgresql['sql_password'] = "snakepliskin" + +.. index:: + triple: configuration; postgresql; sql_ro_password + +sql_ro_password +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "shmunzeltazzen" + +*Example*: + +.. code-block:: ruby + + postgresql['sql_ro_password'] = "shmunzeltazzen" + +.. index:: + triple: configuration; postgresql; sql_ro_user + +sql_ro_user +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "opscode_chef_ro" + +*Example*: + +.. code-block:: ruby + + postgresql['sql_ro_user'] = "opscode_chef_ro" + +.. index:: + triple: configuration; postgresql; sql_user + +sql_user +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "opscode_chef" + +*Example*: + +.. code-block:: ruby + + postgresql['sql_user'] = "opscode_chef" + +.. index:: + triple: configuration; postgresql; trust_auth_cidr_addresses + +trust_auth_cidr_addresses +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + ["127.0.0.1/32", "::1/128"] + + +*Example*: + +.. code-block:: ruby + + postgresql['trust_auth_cidr_addresses'] = ["127.0.0.1/32", "::1/128"] + + +.. index:: + triple: configuration; postgresql; username + +username +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "opscode-pgsql" + +*Example*: + +.. code-block:: ruby + + postgresql['username'] = "opscode-pgsql" + +.. index:: + triple: configuration; postgresql; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + postgresql['vip'] = "127.0.0.1" + +.. index:: + pair: configuration; rabbitmq + +rabbitmq +------------------------------------------------ + +.. index:: + triple: configuration; rabbitmq; consumer_id + +consumer_id +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "hotsauce" + +*Example*: + +.. code-block:: ruby + + rabbitmq['consumer_id'] = "hotsauce" + +.. index:: + triple: configuration; rabbitmq; data_dir + +data_dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/rabbitmq/db" + +*Example*: + +.. code-block:: ruby + + rabbitmq['data_dir'] = "/var/opt/opscode/rabbitmq/db" + +.. index:: + triple: configuration; rabbitmq; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/rabbitmq" + +*Example*: + +.. code-block:: ruby + + rabbitmq['dir'] = "/var/opt/opscode/rabbitmq" + +.. index:: + triple: configuration; rabbitmq; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + rabbitmq['enable'] = true + +.. index:: + triple: configuration; rabbitmq; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + rabbitmq['ha'] = false + +.. index:: + triple: configuration; rabbitmq; jobs_password + +jobs_password +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "workcomplete" + +*Example*: + +.. code-block:: ruby + + rabbitmq['jobs_password'] = "workcomplete" + +.. index:: + triple: configuration; rabbitmq; jobs_user + +jobs_user +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "jobs" + +*Example*: + +.. code-block:: ruby + + rabbitmq['jobs_user'] = "jobs" + +.. index:: + triple: configuration; rabbitmq; jobs_vhost + +jobs_vhost +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/jobs" + +*Example*: + +.. code-block:: ruby + + rabbitmq['jobs_vhost'] = "/jobs" + +.. index:: + triple: configuration; rabbitmq; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/rabbitmq" + +*Example*: + +.. code-block:: ruby + + rabbitmq['log_directory'] = "/var/log/opscode/rabbitmq" + +.. index:: + triple: configuration; rabbitmq; node_ip_address + +node_ip_address +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + rabbitmq['node_ip_address'] = "127.0.0.1" + +.. index:: + triple: configuration; rabbitmq; node_port + +node_port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "5672" + +*Example*: + +.. code-block:: ruby + + rabbitmq['node_port'] = "5672" + +.. index:: + triple: configuration; rabbitmq; nodename + +nodename +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "rabbit@localhost" + +*Example*: + +.. code-block:: ruby + + rabbitmq['nodename'] = "rabbit@localhost" + +.. index:: + triple: configuration; rabbitmq; password + +password +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "chefrocks" + +*Example*: + +.. code-block:: ruby + + rabbitmq['password'] = "chefrocks" + +.. index:: + triple: configuration; rabbitmq; reindexer_vhost + +reindexer_vhost +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/reindexer" + +*Example*: + +.. code-block:: ruby + + rabbitmq['reindexer_vhost'] = "/reindexer" + +.. index:: + triple: configuration; rabbitmq; user + +user +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "chef" + +*Example*: + +.. code-block:: ruby + + rabbitmq['user'] = "chef" + +.. index:: + triple: configuration; rabbitmq; vhost + +vhost +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/chef" + +*Example*: + +.. code-block:: ruby + + rabbitmq['vhost'] = "/chef" + +.. index:: + triple: configuration; rabbitmq; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + rabbitmq['vip'] = "127.0.0.1" + +.. index:: + pair: configuration; redis + +redis +------------------------------------------------ + +.. index:: + triple: configuration; redis; appendfsync + +appendfsync +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "everysec" + +*Example*: + +.. code-block:: ruby + + redis['appendfsync'] = "everysec" + +.. index:: + triple: configuration; redis; appendonly + +appendonly +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "no" + +*Example*: + +.. code-block:: ruby + + redis['appendonly'] = "no" + +.. index:: + triple: configuration; redis; bind + +bind +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + redis['bind'] = "127.0.0.1" + +.. index:: + triple: configuration; redis; databases + +databases +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "16" + +*Example*: + +.. code-block:: ruby + + redis['databases'] = "16" + +.. index:: + triple: configuration; redis; dir + +dir +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/redis" + +*Example*: + +.. code-block:: ruby + + redis['dir'] = "/var/opt/opscode/redis" + +.. index:: + triple: configuration; redis; enable + +enable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + true + +*Example*: + +.. code-block:: ruby + + redis['enable'] = true + +.. index:: + triple: configuration; redis; ha + +ha +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + false + +*Example*: + +.. code-block:: ruby + + redis['ha'] = false + +.. index:: + triple: configuration; redis; log_directory + +log_directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/log/opscode/redis" + +*Example*: + +.. code-block:: ruby + + redis['log_directory'] = "/var/log/opscode/redis" + +.. index:: + triple: configuration; redis; loglevel + +loglevel +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "notice" + +*Example*: + +.. code-block:: ruby + + redis['loglevel'] = "notice" + +.. index:: + triple: configuration; redis; maxmemory + +maxmemory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "1g" + +*Example*: + +.. code-block:: ruby + + redis['maxmemory'] = "1g" + +.. index:: + triple: configuration; redis; maxmemory_policy + +maxmemory_policy +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "volatile-lru" + +*Example*: + +.. code-block:: ruby + + redis['maxmemory_policy'] = "volatile-lru" + +.. index:: + triple: configuration; redis; port + +port +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "6379" + +*Example*: + +.. code-block:: ruby + + redis['port'] = "6379" + +.. index:: + triple: configuration; redis; root + +root +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/var/opt/opscode/redis" + +*Example*: + +.. code-block:: ruby + + redis['root'] = "/var/opt/opscode/redis" + +.. index:: + triple: configuration; redis; timeout + +timeout +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "300" + +*Example*: + +.. code-block:: ruby + + redis['timeout'] = "300" + +.. index:: + triple: configuration; redis; vip + +vip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "127.0.0.1" + +*Example*: + +.. code-block:: ruby + + redis['vip'] = "127.0.0.1" + +.. index:: + triple: configuration; redis; vm + +vm +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + {"enabled"=>"no", + "max_memory"=>"0", + "page_size"=>"32", + "pages"=>"134217728", + "max_threads"=>"4"} + + +*Example*: + +.. code-block:: ruby + + redis['vm'] = {"enabled"=>"no", + "max_memory"=>"0", + "page_size"=>"32", + "pages"=>"134217728", + "max_threads"=>"4"} + + +.. index:: + pair: configuration; user + +user +------------------------------------------------ + +.. index:: + triple: configuration; user; home + +home +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/opt/opscode/embedded" + +*Example*: + +.. code-block:: ruby + + user['home'] = "/opt/opscode/embedded" + +.. index:: + triple: configuration; user; shell + +shell +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "/bin/sh" + +*Example*: + +.. code-block:: ruby + + user['shell'] = "/bin/sh" + +.. index:: + triple: configuration; user; username + +username +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Default Value*: + +.. code-block:: ruby + + "opscode" + +*Example*: + +.. code-block:: ruby + + user['username'] = "opscode" + diff --git a/source/administration/high_availability.rst b/source/administration/high_availability.rst index e69de29..8759b04 100644 --- a/source/administration/high_availability.rst +++ b/source/administration/high_availability.rst @@ -0,0 +1,414 @@ +.. index:: + single: high availability + +================= +High Availability +================= + +.. index:: + pair: high availability; topology + +Private Chef can operate in a High Availability configuration that provides +automated failover for the stateful components in the systems architecture. +The architecture has servers split into two segments, the ``front-end`` and +``back-end``. The front-end servers handle API and Web UI requests, while the +back-end handles data storage and retrieval, which consists of: + +* couchdb +* postgresql +* opscode-solr +* rabbitmq +* redis +* cookbook data + +Under the hood, we achieve this failover through: + +* Asynchronous block level replication of an `LVM `_ logical volume via `DRBD `_ between two back-end servers. +* Primary/Backup cluster election using `VRRP `_ over unicast TCP/IP via `keepalived `_. +* keepalived manages assigning a Virtual IP Address (VIP) to the Primary server based on the results of the election. + +.. image:: ../images/ha-topology.png + +The front-end servers require load-balancers provided by the customer. Opscode recommends: + +* Hardware load-balancers (such as F5 or Netscaler) +* SSL off-loading +* Round-robin as the load-balancing algorithm + +.. index:: + pair: high availability; scalability + +Scalability +----------- + +Front-end scalability is achieved through horizontally scaling the number of +front-end servers. + +Back-end scalability is achieved through vertically scaling the back-end +servers - more memory, CPU, and faster disks will all contribute to getting +more throughput from the back-end servers. Faster disks, and dedicated 10G +NICs will all increase both the reliability of DRBD and the resposiveness +of Private Chef. + +.. index:: + pair: high availability; failover + pair: high availability; recovery + +Failover and Recovery +--------------------- + +When the Primary server in the cluster fails, the ``VRRP`` heartbeat will +stop. At this point the Backup will begin transitioning to the Primary state, +which involves: + +#. Assigning the Virtual IP Address, and sending a proxy-arp. +#. Attempting to take-over as the Primary for the DRBD device. +#. Starting all of the back-end services. + +Note that the first step is tranisitioning the Virtual IP Address, which means +traffic will be flowing to the Backup while it transitions to Primary. + +.. index:: + pair: high availability; transitions + +Graceful Transitions +~~~~~~~~~~~~~~~~~~~~ + +The :command:`keepalived` service manages the VRRP and cluster transitions. It +should be running on both the Primary and Backup servers. To transition from the +Primary to the Backup, simply run the following on the Primary: + +.. code-block:: bash + + $ private-chef-ctl keepalived stop + +This will cause the currrent primary to: + +#. Remove the Virtual IP Address. +#. Stop the services. +#. Unmounting the DRBD device. +#. Becoming secondary for the DRBD device. + +Meanwhile, the backup will be undergoing the same steps as listed above. + +.. index:: + pair: high availability; drbd + single: drbd + +DRBD +---- + +.. index:: + pair: drbd; split brain + +Split Brains (yum) +~~~~~~~~~~~~~~~~~~ + +“Split brain” is a concept of clustered computing systems in which the cluster +loses its heartbeat communication channel and becomes two unconnected pieces. +Recovery from a split-brain is a complex issue and different clustering +software packages use different methods. + +Failures happen, so completely preventing split-brain is not an absolute +possibility. However, it is possible to alleviate some of the issues that crop +up in split-brain scenarios by maxing out the heartbeat network bandwidth and +optimizing transfer protocols. + +DRBD is a shared-nothing system; data is replicated between hosts over a +dedicated network link rather than stored on a central NAS or SAN that all +hosts connect to. The most critical issue in HA storage is loss or corruption +of data. Maximizing the amount of data that can be passed over the wire while +all systems are up and running correctly minimizes the chance that something +will be lost or unrecoverable if a host goes down. + +At any given time, only one drbd host has userland access to the data; this +host is referred to as the “Primary”. The other host runs the drbd daemon but +cannot mount the storage into the filesystem. It receives information from the +Primary and replicates disk actions on its local copy of the storage, but the +partition looks like it doesn’t have a filesystem to the “mount” command. + +DRBD’s approach to split-brain situations is to degrade all partners still +alive to “Secondary” status and wait for manual intervention. This is called +“auto-fencing”, with a goal of minimizing the potential for damage to your +data. When you lose one of the partners in your HA pair, a bit of manual +intervention is required to ensure that the disks aren’t in a bad state and can +be brought back up. The scenarios are discussed below, as well as suggestions +for diagnosing and recovering from each scenario. + +Split-brain Handlers +~~~~~~~~~~~~~~~~~~~~ +DRBD’s configuration allows for custom handlers when a split-brain event +happens. The basic handler sends a notification email to a configurable email +address so the issue can be investigated. + +Private Chef’s drbd.conf file specifies other built-in actions that will be +taken in certain fault scenarios: :: + + after-sb-0pri discard-younger-primary; + after-sb-1pri discard-secondary; + after-sb-2pri call-pri-lost-after-sb; + +What these mean: + +*after-sb-0pri*: split-brain has been detected, and neither node is Primary. +The action “discard-younger-primary” will roll back changes made on the last +host to have been Primary. + +*after-sb-1pri*: split-brain has been detected, and only one node thought it +was Primary when the split-brain happened. In this configuration, +“discard-secondary” will continue operations on the Primary and assume the +Secondary was lost. + +*after-sb-2pri*: split-brain has been detected, and at the time both nodes +thought they were Primary. In this instance, “call-pri-lost-after-sb” will try +to apply the “discard-younger-primary” from the 0pri configuration to determine +which host should be Primary. The other host takes action to become Secondary. + +Assumptions +~~~~~~~~~~~ + +* Backend processes running on two hosts BE1 and BE2 +* Backend is using keepalived and a dedicated network interface for heartbeat +* Backend is using drbd for file redundancy +* BE1 is the current drbd “Primary” and the Private Chef “master” +* BE2 is the current drbd “Secondary” and the Private Chef “backup” + +When both nodes are up and behaving as expected, the contents of /proc/drbd on +the Primary will look like this: :: + + version: 8.4.0 (api:1/proto:86-100) + GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@localhost.localdomain, 2012-02-06 12:59:36 + 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- + ns:4091788 nr:64 dw:112 dr:4092817 al:3 bm:252 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 + +On the Secondary, the will look similar to this: :: + + version: 8.4.1 (api:1/proto:86-100) + GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by dag@Build64R6, 2011-12-21 06:08:50 + 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----- + ns:0 nr:48 dw:48 dr:0 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 + +More information about the fields in this file is available at the drbd.org +website: http://www.drbd.org/users-guide/ch-admin.html . On each host, its own +status is reported first, then the status of its remote partner. + +.. index:: + pair: drbd; failure scenarios + +Failure Scenarios +~~~~~~~~~~~~~~~~~ + +The following four common scenarios are discussed: + +1. BE2 fails gracefully (all data is synced) +2. BE2 hard fails badly (unsynced data) +3. BE1 fails gracefully (all data is synced) +4. BE1 hard fails badly (unsynced data) +5. Both hosts are up as Secondary, and Private Chef is unhappy + +Scenarios 1 and 2 +~~~~~~~~~~~~~~~~~ + +When the acting backup server fails, drbd on the master will continue to +function in Primary mode, whether the drbd on the Secondary was shutdown +gracefully or became unavailable unexpectedly. Verify this by running +:command:`drbdadm role pc0` on the primary: + +.. code-block:: bash + + [root@be1 opscode]# drbdadm role pc0 + Primary/Unknown + [root@be1 opscode]# + +You can see the full status by running :command:`cat /proc/drbd` :: + + version: 8.4.0 (api:1/proto:86-100) + GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@localhost.localdomain, 2012-02-06 12:59:36 + 0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----- + ns:672 nr:0 dw:24 dr:1697 al:2 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:130760 + +The disk partition is still mounted into the filesystem and can be used as normal. + +When the secondary becomes available again, two things may happen. If the +status of the Secondary reports “Inconsistent” or “UpToDate” without manual +intervention, all is well. If it remains “DUnknown”, drbd on the Secondary can +be manually restarted and it will start to sync. The “DUnknown” status is the +report that drbd sees no network connection to its partner. + +The last field in the :file:`/prod/drbd` file, “oos” reports how far the Primary is +“out of sync” with its partner. If the Secondary is down and there are a lot of +writes on the Primary, this number will increase. For example: :: + + version: 8.4.0 (api:1/proto:86-100) + GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@localhost.localdomain, 2012-02-06 12:59:36 + 0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----- + ns:5205048 nr:64 dw:1466728 dr:4180125 al:354 bm:261 lo:1667 pe:0 ua:0 ap:1665 ep:1 wo:b oos:361540 + +When the disks return to a synced state, that field will return to 0. While the +Secondary is syncing, you’ll see a status about the syncing process on both +hosts: + +Secondary syncing: :: + + GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by dag@Build64R6, 2011-12-21 06:08:50 + 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r----- + ns:0 nr:1263008 dw:1257888 dr:0 al:0 bm:60 lo:6 pe:8 ua:5 ap:0 ep:1 wo:f oos:1670512 + [======>.............] sync'ed: 36.3% (1670512/2613068)K + finish: 0:00:47 speed: 35,152 (18,124) want: 44,520 K/sec + +Primary Syncing: :: + + version: 8.4.0 (api:1/proto:86-100) + GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@localhost.localdomain, 2012-02-06 12:59:36 + 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----- + ns:7259268 nr:64 dw:4279364 dr:5721317 al:949 bm:360 lo:5 pe:0 ua:5 ap:0 ep:1 wo:b oos:1121600 + [==========>.........] sync'ed: 57.3% (1121600/2613068)K + finish: 0:00:32 speed: 34,328 (21,304) K/sec + +Eventually the hosts will quiesce and report “ds:UpToDate/UpToDate”. Depending +on how long the Secondary was down, how much data was written to the Primary in +the interim, and the speed of the shared network, this process could be nearly +instantaneous, or could take several minutes. Your Private Chef processes +should not need to be manipulated in any way during this recovery. + +If the Secondary host is lost completely, a new host can be installed in its +place, the device built, and drbd started. The new host will pair with the +existing Primary, sync data, and be ready to take over if necessary. + +Scenario 3 +~~~~~~~~~~ +Trouble starts when the drbd Primary is the host that becomes unavailable. The +drbd process on the Secondary makes no assumptions about whether or not it +should automatically take over, based on the split-brain configurations in the +drbd.conf file. + +Basically, what this means is that when the Primary becomes unavailable to the +Secondary without an explicit takeover being initiated, the Secondary will +assume that it itself is the wrong, split-brained host, and is the one +unconnected and incorrect. It will take no automatic action. + +The status of the secondary looks like this: :: + + version: 8.4.1 (api:1/proto:86-100) + GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by dag@Build64R6, 2011-12-21 06:08:50 + 0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r----- + ns:0 nr:3505480 dw:4938128 dr:0 al:0 bm:290 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 + +The “ds:UpToDate/Unknown” is important; it tells you that the Secondary has all the data that was on the Primary and won’t lose anything if it is promoted. + +If you have verified that the Primary host is going to be down for a while, you can promote the Secondary to Primary: + +.. code-block:: bash + + $ drbdadm primary pc0 + +And the status will change: :: + + version: 8.4.1 (api:1/proto:86-100) + GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by dag@Build64R6, 2011-12-21 06:08:50 + 0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----- + ns:0 nr:3505480 dw:4938128 dr:672 al:0 bm:290 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 + +Notice that ro is now “ro:Primary/Unknown”. You can now recover Private Chef with + +.. code-block:: bash + + $ private-chef-ctl master-recover + +This will start up the configured services and Private Chef will be master on this host. + +If you are able to bring the original Primary back online, the cluster +management script run by keepalived will try to do a drbd takeover, based on +that host’s original Primary/Private Chef Master status. The first thing it +will do is attempt to promote itself to drbd Primary, which will fail if the +disk has been written to at all while this host was down, and keepalived will +be unable to transition back to the original master. This leaves the HA pair in +a good state, with the BE2 box as the drbd Primary/Private Chef Master. + +drbd on BE1 will sync to BE2 and become the clean Secondary. + +Scenario 4 +~~~~~~~~~~ + +So far, the scenarios we have looked at have not created any data loss. When +the hosts in the HA pair are synced, either can be lost and the data will be +safe. + +If you get to a situation in which the Primary host, BE1, is lost and +unrecoverable but the last status of the drbd pair was reporting that the +Secondary node was in an “Inconsistent” state, you are going to lose some data. +The drbd status on the remaining host, BE2, looks like this: :: + + version: 8.4.0 (api:1/proto:86-100) + GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@localhost.localdomain, 2012-02-06 12:59:36 + 0: cs:WFConnection ro:Secondary/Unknown ds:Inconsistent/DUnknown C r----- + ns:0 nr:210572 dw:210572 dr:0 al:0 bm:13 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:40552 + +Since you’re practicing good source code management with your cookbooks and +other files in your Chef repo, you can re-upload any missing bits when you’ve +got a working cluster again. You may find that newly created users or +organizations will need to be recreated. Other actions such as chef-client runs +and uploads will fail while the cluster is in an Inconsistent state, but will +be fine once you’ve fixed the cluster. + +When BE1 has been lost while BE2 is Inconsistent, and you aren’t anticipating +being able to bring it back online, the best thing to do is to provision +another host to become the new Private Chef cluster partner for BE2, and build +it out. If the new host has a new IP address different from BE1, change the +configs on BE2 and reconfigure. + +Private Chef will be freaking out a bit, so turn off the daemons for now with +:command:`private-chef-ctl stop`. + +Let’s call the new host BEA. When you have the drbd devices on BEA completed, +you’ll want to bring up drbd and get it talking to BE2. BE2 won’t want to be +the Primary; it will be waiting for its old Primary to return. Start up drbd +on BEA and verify that it is listening on the correct port and the status in +:file:`/proc/drbd` is reporting that the host is up but “WFConnect”: waiting for +connection. + +By the time you get the new BEA node up, BE2 may have taken itself into +Standalone mode, meaning it is no longer listening on the network port. Run two +commands to get BE2 to connect to BEA: + +.. code-block:: bash + + $ drbdadm primary --force pc0 + $ drbdadm connect pc0 + +You should then see BEA syncing itself from BE2. BE2 will forget all about the +data it was missing from the now-gone BE1, and you can begin the process of +bringing Private Chef back online. + +Running a fast network between the BE1 and BE2 hosts, and keeping it full +throttle for drdb transfers, will go a long way to mitigating the damage done +in the event of a loss of the Primary from and unsynced cluster. + +Scenario 5 +~~~~~~~~~~ + +Sometimes drdb hedges its bets, and puts both nodes in a pair into Secondary +mode. When this happens, you can look at the contents of :file:`/proc/drbd` on +both hosts and see if either of them is showing out of sync. If they are both +“oos:0”, just pick one and promote it to Primary with the above +:command:`drbdadm primary pc0` command. If one or both of the hosts is out of +sync, choose the one with the lower amount of oos and promote it to Primary. + +If the chosen node won’t promote, run the following commands on the other host +to reset its disk state: + +.. code-block:: bash + + $ drbdadm wipe-md pc0 + $ drbdadm create-md pc0 + +That will tell drbd to abandon what is on the node and start over, and should +allow it to sync with the Primary. + +More Info +~~~~~~~~~ + +More information about DRBD is available from the DRBD website, +http://www.drbd.org. + + diff --git a/source/images/ha-topology.png b/source/images/ha-topology.png new file mode 100644 index 0000000000000000000000000000000000000000..e90e8fb0c637b006234d6d46349c1b25a656ea45 GIT binary patch literal 37656 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 and :doc:`creating an organization `. - -Section Contents: - .. toctree:: + :maxdepth: 2 installation/prereqs installation/standalone