{"id":19249325,"url":"https://github.com/sous-chefs/redisio","last_synced_at":"2026-01-27T00:37:20.624Z","repository":{"id":2944339,"uuid":"3957494","full_name":"sous-chefs/redisio","owner":"sous-chefs","description":"Development repository for the redisio cookbook","archived":false,"fork":false,"pushed_at":"2025-11-13T20:45:55.000Z","size":1023,"stargazers_count":298,"open_issues_count":15,"forks_count":296,"subscribers_count":31,"default_branch":"main","last_synced_at":"2025-11-13T22:23:47.390Z","etag":null,"topics":["chef","chef-cookbook","chef-resource","hacktoberfest","managed-by-terraform","redisio"],"latest_commit_sha":null,"homepage":"https://supermarket.chef.io/cookbooks/redisio","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sous-chefs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"open_collective":"sous-chefs"}},"created_at":"2012-04-07T11:59:56.000Z","updated_at":"2025-10-16T09:56:53.000Z","dependencies_parsed_at":"2024-01-15T05:09:36.652Z","dependency_job_id":"551de5f6-d3e2-4a81-9ff6-afcbb08107e7","html_url":"https://github.com/sous-chefs/redisio","commit_stats":{"total_commits":566,"total_committers":109,"mean_commits":5.192660550458716,"dds":0.8091872791519434,"last_synced_commit":"f62e4afadd17d39d77a0c576fd6bf61308cd5ff2"},"previous_names":[],"tags_count":75,"template":false,"template_full_name":null,"purl":"pkg:github/sous-chefs/redisio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sous-chefs%2Fredisio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sous-chefs%2Fredisio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sous-chefs%2Fredisio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sous-chefs%2Fredisio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sous-chefs","download_url":"https://codeload.github.com/sous-chefs/redisio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sous-chefs%2Fredisio/sbom","scorecard":{"id":839517,"data":{"date":"2025-08-11","repo":{"name":"github.com/sous-chefs/redisio","commit":"a99335cb609d8be0d2c67a2a651152449cd7a505"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":2,"reason":"Found 7/27 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Info: Possibly incomplete results: error parsing shell code: \u003e must be followed by a word: templates/default/redis.init.erb:0","Info: Possibly incomplete results: error parsing shell code: not a valid parameter expansion operator: \u003c: templates/default/redis.rcinit.erb:0","Info: Possibly incomplete results: error parsing shell code: \u003e must be followed by a word: templates/default/sentinel.init.erb:0","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/sous-chefs/redisio/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/sous-chefs/redisio/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/sous-chefs/redisio/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/sous-chefs/redisio/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/stale.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/sous-chefs/redisio/stale.yml/main?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'actions' permission set to 'write': .github/workflows/ci.yml:14","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/ci.yml:15","Warn: jobLevel 'statuses' permission set to 'write': .github/workflows/ci.yml:17","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/stale.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 10 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T20:06:39.542Z","repository_id":2944339,"created_at":"2025-08-23T20:06:39.542Z","updated_at":"2025-08-23T20:06:39.542Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28793866,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T21:49:50.245Z","status":"ssl_error","status_checked_at":"2026-01-26T21:48:29.455Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chef","chef-cookbook","chef-resource","hacktoberfest","managed-by-terraform","redisio"],"created_at":"2024-11-09T18:13:42.978Z","updated_at":"2026-01-27T00:37:20.608Z","avatar_url":"https://github.com/sous-chefs.png","language":"HTML","funding_links":["https://opencollective.com/sous-chefs"],"categories":[],"sub_categories":[],"readme":"# Redisio Cookbook\n\n[![Cookbook Version](https://img.shields.io/cookbook/v/redisio.svg)](https://supermarket.chef.io/cookbooks/redisio)\n[![Build Status](https://img.shields.io/circleci/project/github/sous-chefs/redisio/master.svg)](https://circleci.com/gh/sous-chefs/redisio)\n[![OpenCollective](https://opencollective.com/sous-chefs/backers/badge.svg)](#backers)\n[![OpenCollective](https://opencollective.com/sous-chefs/sponsors/badge.svg)](#sponsors)\n[![License](https://img.shields.io/badge/License-Apache%202.0-green.svg)](https://opensource.org/licenses/Apache-2.0)\n\nPlease read the changelog when upgrading from the 1.x series to the 2.x series\n\n## Description\n\nWebsite:: [https://github.com/sous-chefs/redisio](https://github.com/sous-chefs/redisio)\n\nInstalls and configures Redis server instances\n\n## Maintainers\n\nThis cookbook is maintained by the Sous Chefs. The Sous Chefs are a community of Chef cookbook maintainers working together to maintain important cookbooks. If you’d like to know more please visit [sous-chefs.org](https://sous-chefs.org/) or come chat with us on the Chef Community Slack in [#sous-chefs](https://chefcommunity.slack.com/messages/C2V7B88SF).\n\n## Requirements\n\nThis cookbook builds redis from source or install it from packages, so it should work on any architecture for the supported distributions.  Init scripts are installed into /etc/init.d/\n\nIt depends on the ulimit cookbook: [https://github.com/bmhatfield/chef-ulimit](https://github.com/bmhatfield/chef-ulimit) and the build-essentials cookbook: [https://github.com/chef-cookbooks/build-essential](https://github.com/opscode-cookbooks/build-essential)\n\n### Platforms\n\n* Debian, Ubuntu\n* CentOS, Red Hat, Fedora, Scientific Linux\n* FreeBSD\n\n### Testing\n\nThis cookbook is tested with Delivery's local mode run under Chef-DK and Test Kitchen\n\n* delivery local all\n* kitchen test\n\nTested on:\n\n* Centos 6\n* Centos 7\n* Debian 8\n* Fedora 28\n* Ubuntu 16.04\n\n## Usage\n\nThe redisio cookbook contains LWRP for installing, configuring and managing redis and redis_sentinel.\n\nThe install recipe can build, compile and install redis from sources or install from packages. The configure recipe will configure redis and set up service resources.  These resources will be named for the port of the redis server, unless a \"name\" attribute was specified.  Example names would be: service[\"redis6379\"] or service[\"redismaster\"] if the name attribute was \"master\".\n_NOTE: currently installation from source is not supported for FreeBSD_\n\nThe most common use case for the redisio cookbook is to use the default recipe, followed by the enable recipe.\n\nAnother common use case is to use the default, and then call the service resources created by it from another cookbook.\n\nIt is important to note that changing the configuration options of redis does not make them take effect on the next chef run.  Due to how redis works, you cannot reload a configuration without restarting the redis service.  Redis does not offer a reload option, in order to have new options be used redis must be stopped and started.\n\nYou should make sure to set the ulimit for the user you want to run redis as to be higher than the max connections you allow.\n_NOTE: setting ulimit is not supported on FreeBSD since the ulimit cookbook doesn't support FreeBSD_\n\nThe disable recipe just stops redis and removes it from run levels.\n\nThe cookbook also contains a recipe to allow for the installation of the redis ruby gem.\n\nRedis-sentinel will write configuration and state data back into its configuration file.  This creates obvious problems when that config is managed by chef. By default, this cookbook will create the config file once, and then leave a breadcrumb that will guard against the file from being updated again.\n\n### Recipes\n\n* configure - This recipe is used to configure redis.\n* default - This is used to install the pre-requisites for building redis, and to make the LWRPs available\n* disable - This recipe can be used to disable the redis service and remove it from runlevels\n* enable - This recipe can be used to enable the redis services and add it to runlevels\n* install - This recipe is used to install redis.\n* redis_gem - This recipe can be used to install the redis ruby gem\n* sentinel - This recipe can be used to install and configure sentinel\n* sentinel_enable - This recipe can be used to enable the sentinel service(s)\n* disable_os_default - This recipe can be used to disable the default OS redis init script\n\n### Role File Examples\n\n#### Install redis and set up an instance with default settings on default port, and start the service through a role file\n\n```ruby\nrun_list *%w[\n  recipe[redisio]\n  recipe[redisio::enable]\n]\n\ndefault_attributes({})\n```\n\n##### Install redis with packages and set up an instance with default settings on default port, and start the service through a role file\n\n```ruby\nrun_list *%w[\n  recipe[redisio]\n  recipe[redisio::enable]\n]\n\ndefault_attributes({\n  'redisio' =\u003e {\n    package_install: true\n    version:\n  }\n})\n```\n\n##### Install redis, give the instance a name, and use a unix socket\n\n```ruby\nrun_list *%w[\n  recipe[redisio]\n  recipe[redisio::enable]\n]\n\ndefault_attributes({\n  'redisio' =\u003e {\n    'servers' =\u003e [\n      {'name' =\u003e 'master', 'port' =\u003e '6379', 'unixsocket' =\u003e '/tmp/redis.sock', 'unixsocketperm' =\u003e '755'},\n    ]\n  }\n})\n```\n\n##### Install redis and pull the password from an encrypted data bag\n\n```ruby\nrun_list *%w[\n  recipe[redisio]\n  recipe[redisio::enable]\n]\n\ndefault_attributes({\n  'redisio' =\u003e {\n    'servers' =\u003e [\n      {'data_bag_name' =\u003e 'redis', 'data_bag_item' =\u003e 'auth', 'data_bag_key' =\u003e 'password'},\n    ]\n  }\n})\n```\n\n###### Data Bag\n\n```ruby\n{\n    \"id\": \"auth\",\n    \"password\": \"abcdefghijklmnopqrstuvwxyz\"\n}\n```\n\n##### Install redis and set up two instances on the same server, on different ports, with one slaved to the other through a role file\n\n```ruby\nrun_list *%w[\n  recipe[redisio]\n  recipe[redisio::enable]\n]\n\ndefault_attributes({\n  'redisio' =\u003e {\n    'servers' =\u003e [\n      {'port' =\u003e '6379'},\n      {'port' =\u003e '6380', 'replicaof' =\u003e { 'address' =\u003e '127.0.0.1', 'port' =\u003e '6379' }}\n    ]\n  }\n})\n```\n\n##### Install redis and set up two instances, on the same server, on different ports, with the default data directory changed to /mnt/redis, and the second instance named\n\n```ruby\nrun_list *%w[\n  recipe[redisio]\n  recipe[redisio::enable]\n]\n\ndefault_attributes({\n  'redisio' =\u003e {\n    'default_settings' =\u003e {'datadir' =\u003e '/mnt/redis'},\n    'servers' =\u003e [{'port' =\u003e '6379'}, {'port' =\u003e '6380', 'name' =\u003e \"MyInstance\"}]\n  }\n})\n```\n\n##### Install redis and set up three instances on the same server, changing the default data directory to /mnt/redis, each instance will use a different backup type, and one instance will use a different data dir\n\n```ruby\nrun_list *%w[\n  recipe[redisio]\n  recipe[redisio::enable]\n]\n\ndefault_attributes({\n  'redisio' =\u003e {\n    'default_settings' =\u003e { 'datadir' =\u003e '/mnt/redis/'},\n    'servers' =\u003e [\n      {'port' =\u003e '6379','backuptype' =\u003e 'aof'},\n      {'port' =\u003e '6380','backuptype' =\u003e 'both'},\n      {'port' =\u003e '6381','backuptype' =\u003e 'rdb', 'datadir' =\u003e '/mnt/redis6381'}\n    ]\n  }\n})\n```\n\n##### Install redis 2.4.11 (lower than the default version) and turn safe install off, for the event where redis is already installed This will use the default settings.  Keep in mind the redis version will not actually be updated until you restart the service (either through the LWRP or manually)\n\n```ruby\nrun_list *%w[\n  recipe[redisio]\n  recipe[redisio::enable]\n]\n\ndefault_attributes({\n  'redisio' =\u003e {\n    'safe_install' =\u003e false,\n    'version'      =\u003e '2.4.11'\n  }\n})\n```\n\n##### Install a single redis-sentinel to listen for a master on localhost and default port number\n\n```ruby\nrun_list *%w[\n  recipe[redisio::sentinel]\n  recipe[redisio::sentinel_enable]\n]\n```\n\n#### Install redis and set up two instances, on the same server, on different ports, the second instance configuration file will be overwriten by chef\n\n```ruby\nrun_list *%w[\n  recipe[redisio]\n  recipe[redisio::enable]\n]\n\ndefault_attributes({\n  'redisio' =\u003e {\n    'servers' =\u003e [{'port' =\u003e '6379'}, {'port' =\u003e '6380', 'breadcrumb' =\u003e false}]\n  }\n})\n```\n\n## LWRP Examples\n\nInstead of using my provided recipes, you can simply depend on the redisio cookbook in your metadata and use the LWRP's yourself.  I will show a few examples of ways to use the LWRPS, detailed breakdown of options are below\nin the resources/providers section\n\n### Install Resource\n\nIt is important to note that this call has certain expectations for example, it expects the redis package to be in the format `redis-VERSION.tar.gz'.\n\n```ruby\nredisio_install \"redis-installation\" do\n  version '2.6.9'\n  download_url 'http://redis.googlecode.com/files/redis-2.6.9.tar.gz'\n  safe_install false\n  install_dir '/usr/local/'\nend\n```\n\n### Configure Resource\n\nThe servers resource expects an array of hashes where each hash is required to contain at a key-value pair of 'port' =\u003e 'port numbers'.\n\n```ruby\nredisio_configure \"redis-servers\" do\n  version '2.6.9'\n  default_settings node['redisio']['default_settings']\n  servers node['redisio']['servers']\n  base_piddir node['redisio']['base_piddir']\nend\n```\n\n### Sentinel Resource\n\nThe sentinel resource installs and configures all of your redis_sentinels defined in sentinel_instances\n\nUsing the sentinel resources:\n\n```ruby\nredisio_sentinel \"redis-sentinels\" do\n  version '2.6.9'\n  sentinel_defaults node['redisio']['sentinel_defaults']\n  sentinels sentinel_instances\n  base_piddir node['redisio']['base_piddir']\nend\n```\n\n## Attributes\n\nConfiguration options, each option corresponds to the same-named configuration option in the redis configuration file;  default values listed\n\n* `redisio['mirror']` - mirror server with path to download redis package, default is [http://download.redis.io/releases/](http://download.redis.io/releases/)\n* `redisio['base_name']` - the base name of the redis package to be downloaded (the part before the version), default is 'redis-'\n* `redisio['artifact_type']` - the file extension of the package.  currently only .tar.gz and .tgz are supported, default is 'tar.gz'\n* `redisio['version']` - the version number of redis to install (also appended to the `base_name` for downloading), default is '2.8.17'\n* `redisio['safe_install']` - prevents redis from installing itself if another version of redis is installed, default is true\n* `redisio['base_piddir']` - This is the directory that redis pidfile directories and pidfiles will be placed in.  Since redis can run as non root, it needs to have proper\n                           permissions to the directory to create its pid.  Since each instance can run as a different user, these directories will all be nested inside this base one.\n* `redisio['bypass_setup']` - This attribute allows users to prevent the default recipe from calling the install and configure recipes.\n* `redisio['job_control']` - This deteremines what job control type will be used.  Currently supports 'initd' or 'upstart' options.  Defaults to 'initd'.\n\nDefault settings is a hash of default settings to be applied to to ALL instances.  These can be overridden for each individual server in the servers attribute.  If you are going to set logfile to a specific file, make sure to set syslog-enabled to no.\n\n* `redisio['default_settings']` - { 'redis-option' =\u003e 'option setting' }\n\nAvailable options and their defaults\n\n```config\n'user'                    =\u003e 'redis' - the user to own the redis datadir, redis will also run under this user\n'group'                   =\u003e 'redis' - the group to own the redis datadir\n'permissions'             =\u003e '0644' - the unix permissions applied to the server config file\n'homedir'                 =\u003e Home directory of the user. Varies on distribution, check attributes file\n'shell'                   =\u003e Users shell. Varies on distribution, check attributes file\n'systemuser'              =\u003e true - Sets up the instances user as a system user\n'ulimit'                  =\u003e 0 - 0 is a special value causing the ulimit to be maxconnections +32.  Set to nil or false to disable setting ulimits\n'configdir'               =\u003e '/etc/redis' - configuration directory\n'name'                    =\u003e nil, Allows you to name the server with something other than port.  Useful if you want to use unix sockets\n'tcpbacklog'              =\u003e '511',\n'address'                 =\u003e nil, Can accept a single string or an array. When using an array, the FIRST value will be used by the init script for connecting to redis\n'databases'               =\u003e '16',\n'backuptype'              =\u003e 'rdb',\n'datadir'                 =\u003e '/var/lib/redis',\n'unixsocket'              =\u003e nil - The location of the unix socket to use,\n'unixsocketperm'          =\u003e nil - The permissions of the unix socket,\n'timeout'                 =\u003e '0',\n'keepalive'               =\u003e '0',\n'loglevel'                =\u003e 'notice',\n'logfile'                 =\u003e nil,\n'syslogenabled'           =\u003e 'yes',\n'syslogfacility'          =\u003e 'local0',\n'shutdown_save'           =\u003e false,\n'save'                    =\u003e nil, # Defaults to ['900 1','300 10','60 10000'] inside of template.  Needed due to lack of hash subtraction\n'stopwritesonbgsaveerror' =\u003e 'yes',\n'rdbcompression'          =\u003e 'yes',\n'rdbchecksum'             =\u003e 'yes',\n'dbfilename'              =\u003e nil,\n'replicaof'               =\u003e nil,\n'masterauth'              =\u003e nil,\n'replicaservestaledata'   =\u003e 'yes',\n'replicareadonly'         =\u003e 'yes',\n'repldisklesssync'        =\u003e 'no', # Requires redis 2.8.18+\n'repldisklesssyncdelay'   =\u003e '5', # Requires redis 2.8.18+\n'replpingreplicaperiod'   =\u003e '10',\n'repltimeout'             =\u003e '60',\n'repldisabletcpnodelay    =\u003e 'no',\n'replicapriority'         =\u003e '100',\n'requirepass'             =\u003e nil,\n'rename_commands'         =\u003e nil, or a hash where each key is a redis command and the value is the command's new name.\n'maxclients'              =\u003e 10000,\n'maxmemory'               =\u003e nil,\n'maxmemorypolicy'         =\u003e nil,\n'maxmemorysamples'        =\u003e nil,\n'appendfilename'          =\u003e nil,\n'appendfsync'             =\u003e 'everysec',\n'noappendfsynconrewrite'  =\u003e 'no',\n'aofrewritepercentage'    =\u003e '100',\n'aofrewriteminsize'       =\u003e '64mb',\n'luatimelimit'            =\u003e '5000',\n'slowloglogslowerthan'    =\u003e '10000',\n'slowlogmaxlen'           =\u003e '1024',\n'notifykeyspaceevents'    =\u003e '',\n'hashmaxziplistentries'   =\u003e '512',\n'hashmaxziplistvalue'     =\u003e '64',\n'listmaxziplistentries'   =\u003e '512',\n'listmaxziplistvalue'     =\u003e '64',\n'setmaxintsetentries'     =\u003e '512',\n'zsetmaxziplistentries'   =\u003e '128',\n'zsetmaxziplistvalue'     =\u003e '64',\n'hllsparsemaxbytes'       =\u003e '3000',\n'activerehasing'          =\u003e 'yes',\n'clientoutputbufferlimit' =\u003e [\n  %w(normal 0 0 0),\n  %w(replica 256mb 64mb 60),\n  %w(pubsub 32mb 8mb 60)\n],\n'hz'                         =\u003e '10',\n'aofrewriteincrementalfsync' =\u003e 'yes',\n'clusterenabled'             =\u003e 'no',\n'clusterconfigfile'          =\u003e nil, # Defaults to redis instance name inside of template if cluster is enabled.\n'clusternodetimeout'         =\u003e 5000,\n'clusterport'                =\u003e nil,\n'includes'                   =\u003e nil,\n'aclfile'                    =\u003e nil, # Requires redis 6+\n'breadcrumb'                 =\u003e true # Defaults to create breadcrumb lock-file.\n'tlsport'                    =\u003e nil,\n'tlscertfile'                =\u003e nil,\n'tlskeyfile'                 =\u003e nil,\n'tlskeyfilepass'             =\u003e nil,\n'tlsclientcertfile'          =\u003e nil,\n'tlsclientkeyfile'           =\u003e nil,\n'tlsclientkeyfilepass'       =\u003e nil,\n'tlsdhparamsfile'            =\u003e nil,\n'tlscacertfile'              =\u003e nil,\n'tlscacertdir'               =\u003e nil,\n'tlsauthclients'             =\u003e nil,\n'tlsreplication'             =\u003e nil,\n'tlscluster'                 =\u003e nil,\n'tlsprotocols'               =\u003e nil,\n'tlsciphers'                 =\u003e nil,\n'tlsciphersuites'            =\u003e nil,\n'tlspreferserverciphers'     =\u003e nil,\n'tlssessioncaching'          =\u003e nil,\n'tlssessioncachesize'        =\u003e nil,\n'tlssessioncachetimeout'     =\u003e nil,\n```\n\n* `redisio['servers']` - An array where each item is a set of key value pairs for redis instance specific settings.  The only required option is 'port'.  These settings will override the options in 'default_settings', if it is left `nil` it will default to `[{'port' =\u003e '6379'}]`. If set to `[]` (empty array), no instances will be created.\n\nThe redis_gem recipe  will also allow you to install the redis ruby gem, these are attributes related to that, and are in the redis_gem attributes file.\n\n* `redisio['gem']['name']` - the name of the gem to install, defaults to 'redis'\n* `redisio['gem']['version']` -  the version of the gem to install.  if it is nil, the latest available version will be installed.\n\nThe sentinel recipe's use their own attribute file.\n\n* `redisio['sentinel_defaults']` - { 'sentinel-option' =\u003e 'option setting' }\n\n```config\n'user'                    =\u003e 'redis',\n'configdir'               =\u003e '/etc/redis',\n'sentinel_bind'           =\u003e nil,\n'sentinel_port'           =\u003e 26379,\n'monitor'                 =\u003e nil,\n'down-after-milliseconds' =\u003e 30000,\n'can-failover'            =\u003e 'yes',\n'parallel-syncs'          =\u003e 1,\n'failover-timeout'        =\u003e 900000,\n'loglevel'                =\u003e 'notice',\n'logfile'                 =\u003e nil,\n'syslogenabled'           =\u003e 'yes',\n'syslogfacility'          =\u003e 'local0',\n'quorum_count'            =\u003e 2,\n'protected-mode'          =\u003e nil,\n'maxclients'              =\u003e 10000,\n'aclfile'                 =\u003e nil, # Requires redis 6+\n'includes'                =\u003e nil,\n```\n\n* `redisio['redisio']['sentinel']['manage_config']` - Should the cookbook manage the redis and redis sentinel config files.  This is best set to false when using redis_sentinel as it will write state into both configuration files.\n\n* `redisio['redisio']['sentinels']` - Array of sentinels to configure on the node. These settings will override the options in 'sentinel_defaults', if it is left `nil` it will default to `[{'port' =\u003e '26379', 'name' =\u003e 'mycluster', 'master_ip' =\u003e '127.0.0.1', 'master_port' =\u003e 6379}]`. If set to `[]` (empty array), no instances will be created.\n\nYou may also pass an array of masters to monitor like so:\n\n```ruby\n[{\n  'sentinel_port' =\u003e '26379',\n  'name' =\u003e 'mycluster_sentinel',\n  'masters' =\u003e [\n    { 'master_name' =\u003e 'master6379', 'master_ip' =\u003e '127.0.0.1', 'master_port' =\u003e 6379 },\n    { 'master_name' =\u003e 'master6380', 'master_ip' =\u003e '127.0.0.1', 'master_port' =\u003e 6380 }\n  ]\n\n}]\n```\n\n## Resources/Providers\n\n### `install`\n\nActions:\n\n* `run` - perform the install (default)\n* `nothing` - do nothing\n\nAttribute Parameters\n\n* `version` - the version of redis to download / install\n* `download_url` - the URL plus filename of the redis package to install\n* `download_dir` - the directory to store the downloaded package\n* `artifact_type` - the file extension of the package\n* `base_name` - the name of the package minus the extension and version number\n* `safe_install` - a true or false value which determines if a version of redis will be installed if one already exists, defaults to true\n\nThis resource expects the following naming conventions:\n\npackage file should be in the format base_nameVersion_number.artifact_type\n\npackage file after extraction should be inside of the directory base_nameVersion_number\n\n```ruby\ninstall \"redis\" do\n  action [:run,:nothing]\nend\n```\n\n### `configure`\n\nActions:\n\n* `run` - perform the configure (default)\n* `nothing` - do nothing\n\nAttribute Parameters\n\n* `version` - the version of redis to download / install\n* `base_piddir` - directory where pid files will be created\n* `user` - the user to run redis as, and to own the redis files\n* `group` - the group to own the redis files\n* `default_settings` - a hash of the default redis server settings\n* `servers` - an array of hashes containing server configurations overrides (port is the only required)\n\n```ruby\nconfigure \"redis\" do\n  action [:run,:nothing]\nend\n```\n\n## Contributors\n\nThis project exists thanks to all the people who [contribute.](https://opencollective.com/sous-chefs/contributors.svg?width=890\u0026button=false)\n\n### Backers\n\nThank you to all our backers!\n\n![https://opencollective.com/sous-chefs#backers](https://opencollective.com/sous-chefs/backers.svg?width=600\u0026avatarHeight=40)\n\n### Sponsors\n\nSupport this project by becoming a sponsor. Your logo will show up here with a link to your website.\n\n![https://opencollective.com/sous-chefs/sponsor/0/website](https://opencollective.com/sous-chefs/sponsor/0/avatar.svg?avatarHeight=100)\n![https://opencollective.com/sous-chefs/sponsor/1/website](https://opencollective.com/sous-chefs/sponsor/1/avatar.svg?avatarHeight=100)\n![https://opencollective.com/sous-chefs/sponsor/2/website](https://opencollective.com/sous-chefs/sponsor/2/avatar.svg?avatarHeight=100)\n![https://opencollective.com/sous-chefs/sponsor/3/website](https://opencollective.com/sous-chefs/sponsor/3/avatar.svg?avatarHeight=100)\n![https://opencollective.com/sous-chefs/sponsor/4/website](https://opencollective.com/sous-chefs/sponsor/4/avatar.svg?avatarHeight=100)\n![https://opencollective.com/sous-chefs/sponsor/5/website](https://opencollective.com/sous-chefs/sponsor/5/avatar.svg?avatarHeight=100)\n![https://opencollective.com/sous-chefs/sponsor/6/website](https://opencollective.com/sous-chefs/sponsor/6/avatar.svg?avatarHeight=100)\n![https://opencollective.com/sous-chefs/sponsor/7/website](https://opencollective.com/sous-chefs/sponsor/7/avatar.svg?avatarHeight=100)\n![https://opencollective.com/sous-chefs/sponsor/8/website](https://opencollective.com/sous-chefs/sponsor/8/avatar.svg?avatarHeight=100)\n![https://opencollective.com/sous-chefs/sponsor/9/website](https://opencollective.com/sous-chefs/sponsor/9/avatar.svg?avatarHeight=100)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsous-chefs%2Fredisio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsous-chefs%2Fredisio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsous-chefs%2Fredisio/lists"}