├── redis ├── files │ ├── .init │ ├── macros.jinja │ ├── default │ │ └── systemd.ini.jinja │ ├── upstart.conf.jinja │ ├── redis_initd.jinja │ ├── redis-sentinel_initd.jinja │ ├── redis-server@.service │ ├── redis-sentinel.conf.jinja │ ├── redis-2.4.conf.jinja │ ├── redis-2.6.conf.jinja │ ├── redis-2.8.conf.jinja │ ├── redis-3.0.conf.jinja │ ├── redis-3.2.conf.multi.jinja │ ├── redis-3.2.conf.jinja │ └── redis-3.2-ng.conf.jinja ├── clean.sls ├── init.sls ├── server │ ├── init.sls │ ├── clean.sls │ └── install.sls ├── _mapdata │ ├── _mapdata.jinja │ └── init.sls ├── osfingermap.yaml ├── map.jinja ├── osfamilymap.yaml ├── instances.sls ├── defaults.yaml ├── sentinel.sls └── common.sls ├── .rstcheck.cfg ├── FORMULA ├── commitlint.config.js ├── .github └── workflows │ └── commitlint.yml ├── bin ├── install-hooks └── kitchen ├── .salt-lint ├── LICENSE ├── .rubocop.yml ├── test └── integration │ ├── default │ ├── controls │ │ └── redis_spec.rb │ ├── inspec.yml │ └── README.md │ └── share │ ├── inspec.yml │ ├── README.md │ └── libraries │ └── system.rb ├── release-rules.js ├── Gemfile ├── pre-commit_semantic-release.sh ├── .yamllint ├── .gitignore ├── .pre-commit-config.yaml ├── CODEOWNERS ├── pillar.example ├── release.config.js ├── docs ├── README.rst ├── AUTHORS.rst └── CHANGELOG.rst ├── AUTHORS.md ├── .travis.yml ├── kitchen.yml ├── .gitlab-ci.yml ├── CHANGELOG.md └── Gemfile.lock /redis/files/.init: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /redis/clean.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - redis.server.clean 3 | -------------------------------------------------------------------------------- /redis/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - redis.common 3 | - redis.server 4 | -------------------------------------------------------------------------------- /redis/server/init.sls: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=sls 3 | 4 | include: 5 | - .install 6 | -------------------------------------------------------------------------------- /.rstcheck.cfg: -------------------------------------------------------------------------------- 1 | [rstcheck] 2 | report=info 3 | ignore_language=rst 4 | ignore_messages=(Duplicate (ex|im)plicit target.*|Hyperlink target ".*" is not referenced\.$) 5 | -------------------------------------------------------------------------------- /FORMULA: -------------------------------------------------------------------------------- 1 | name: redis 2 | os: Debian, Ubuntu, RedHat, Fedora, CentOS 3 | os_family: Debian, RedHat 4 | version: 0.28.1 5 | release: 1 6 | minimum_version: 2017.7 7 | summary: template formula 8 | description: Formula to install and configure Redis 9 | top_level_dir: redis 10 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['@commitlint/config-conventional'], 3 | rules: { 4 | 'body-max-line-length': [2, 'always', 120], 5 | 'footer-max-line-length': [2, 'always', 120], 6 | 'header-max-length': [2, 'always', 72], 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /redis/files/macros.jinja: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=jinja 3 | # 4 | # Collection of common macros 5 | 6 | {%- macro format_kwargs(kwarg) -%} 7 | {%- if kwarg and kwarg is mapping %} 8 | 9 | {%- filter indent(4) %} 10 | {%- for k, v in kwarg|dictsort() %} 11 | - {{ k }}: {{ v }} 12 | {%- endfor %} 13 | {%- endfilter %} 14 | 15 | {%- endif %} 16 | {%- endmacro %} 17 | -------------------------------------------------------------------------------- /.github/workflows/commitlint.yml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | name: Commitlint 5 | 'on': [pull_request] 6 | 7 | jobs: 8 | lint: 9 | runs-on: ubuntu-latest 10 | env: 11 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 12 | steps: 13 | - uses: actions/checkout@v2 14 | with: 15 | fetch-depth: 0 16 | - uses: wagoid/commitlint-github-action@v1 17 | -------------------------------------------------------------------------------- /redis/_mapdata/_mapdata.jinja: -------------------------------------------------------------------------------- 1 | # yamllint disable rule:indentation rule:line-length 2 | # {{ grains.get("osfinger", grains.os) }} 3 | --- 4 | {#- use salt.slsutil.serialize to avoid encoding errors on some platforms #} 5 | {{ salt["slsutil.serialize"]( 6 | "yaml", 7 | map, 8 | default_flow_style=False, 9 | allow_unicode=True, 10 | ) 11 | | regex_replace("^\s+'$", "'", multiline=True) 12 | | trim 13 | }} 14 | -------------------------------------------------------------------------------- /redis/osfingermap.yaml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | Debian-8: &debian-old 5 | sentinel_pkg: redis-server 6 | sentinel: 7 | pidfile: /var/run/redis/sentinel.pid 8 | Debian-7: 9 | <<: *debian-old 10 | cfg_version: "2.4" 11 | Ubuntu-16.04: 12 | cfg_version: "3.0" 13 | sentinel_pkg: redis-sentinel 14 | CentOS Linux-7: 15 | cfg_version: "3.2" 16 | sentinel: 17 | group: root 18 | daemonize: "no" 19 | CentOS-6: 20 | sentinel: 21 | group: root 22 | -------------------------------------------------------------------------------- /bin/install-hooks: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | set -o nounset # Treat unset variables as an error and immediately exit 3 | set -o errexit # If a command fails exit the whole script 4 | 5 | if [ "${DEBUG:-false}" = "true" ]; then 6 | set -x # Run the entire script in debug mode 7 | fi 8 | 9 | if ! command -v pre-commit >/dev/null 2>&1; then 10 | echo "pre-commit not found: please install or check your PATH" >&2 11 | echo "See https://pre-commit.com/#installation" >&2 12 | exit 1 13 | fi 14 | 15 | pre-commit install --install-hooks 16 | pre-commit install --hook-type commit-msg --install-hooks 17 | -------------------------------------------------------------------------------- /.salt-lint: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | exclude_paths: [] 5 | rules: {} 6 | skip_list: 7 | # Using `salt-lint` for linting other files as well, such as Jinja macros/templates 8 | - 205 # Use ".sls" as a Salt State file extension 9 | # Skipping `207` and `208` because `210` is sufficient, at least for the time-being 10 | # I.e. Allows 3-digit unquoted codes to still be used, such as `644` and `755` 11 | - 207 # File modes should always be encapsulated in quotation marks 12 | - 208 # File modes should always contain a leading zero 13 | tags: [] 14 | verbosity: 1 15 | -------------------------------------------------------------------------------- /redis/files/default/systemd.ini.jinja: -------------------------------------------------------------------------------- 1 | ######################################################### 2 | # File managed by Salt. Changes risk being overwritten. 3 | ######################################################### 4 | [Unit] 5 | Description={{ desc }} 6 | Wants=network-online.target 7 | After= 8 | Documentation=https://github.com/saltstack-formulas/prometheus-formula 9 | 10 | [Service] 11 | User={{ user }} 12 | Group={{ group }} 13 | WorkingDirectory={{ workdir }} 14 | ExecStart={{ start }} 15 | ExecStop={{ stop }} 16 | PIDFile=/var/run/{{ name }}.pid 17 | 18 | [Install] 19 | WantedBy=multi-user.target 20 | -------------------------------------------------------------------------------- /redis/files/upstart.conf.jinja: -------------------------------------------------------------------------------- 1 | description "Redis Server" 2 | author "auser" 3 | 4 | # run when the local FS becomes available 5 | start on local-filesystems 6 | stop on shutdown 7 | 8 | # Set an OOM score 9 | oom score 400 10 | 11 | # The default redis conf has `daemonize = yes` and will naiively fork itself. 12 | expect fork 13 | 14 | # Respawn unless redis dies 10 times in 5 seconds 15 | respawn 16 | respawn limit 10 5 17 | 18 | # run redis as the correct user 19 | setuid {{ user }} 20 | setgid {{ user }} 21 | 22 | # run redis with the correct config file for this instance 23 | exec {{ bin }} {{ conf }} 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014-2015 Salt Stack Formulas 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | 15 | -------------------------------------------------------------------------------- /.rubocop.yml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | # General overrides used across formulas in the org 5 | Layout/LineLength: 6 | # Increase from default of `80` 7 | # Based on https://github.com/PyCQA/flake8-bugbear#opinionated-warnings (`B950`) 8 | Max: 88 9 | Metrics/BlockLength: 10 | IgnoredMethods: 11 | - control 12 | - describe 13 | # Increase from default of `25` 14 | Max: 30 15 | Security/YAMLLoad: 16 | Exclude: 17 | - test/integration/**/_mapdata.rb 18 | 19 | # General settings across all cops in this formula 20 | AllCops: 21 | NewCops: enable 22 | 23 | # Any offenses that should be fixed, e.g. collected via. `rubocop --auto-gen-config` 24 | -------------------------------------------------------------------------------- /test/integration/default/controls/redis_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | control 'redis' do 4 | impact 1.0 5 | title 'Manage Redis Server' 6 | desc ' 7 | Manage the redis server 8 | ' 9 | tag 'redis', 'package' 10 | 11 | redis_service = 12 | case system.platform[:family] 13 | when 'redhat', 'fedora', 'arch' 14 | 'redis' 15 | when 'debian' 16 | 'redis-server' 17 | when 'suse' 18 | 'redis@default' 19 | end 20 | 21 | describe service(redis_service) do 22 | it { should be_installed } 23 | it { should be_enabled } 24 | it { should be_running } 25 | end 26 | 27 | describe port(6379) do 28 | it { should be_listening } 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /test/integration/share/inspec.yml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | name: share 5 | title: InSpec shared resources 6 | maintainer: SaltStack Formulas 7 | license: Apache-2.0 8 | summary: shared resources 9 | supports: 10 | - platform-name: debian 11 | - platform-name: ubuntu 12 | - platform-name: centos 13 | - platform-name: fedora 14 | - platform-name: opensuse 15 | - platform-name: suse 16 | - platform-name: freebsd 17 | - platform-name: openbsd 18 | - platform-name: amazon 19 | - platform-name: oracle 20 | - platform-name: arch 21 | - platform-name: gentoo 22 | - platform-name: almalinux 23 | - platform-name: rocky 24 | - platform-name: mac_os_x 25 | - platform: windows 26 | -------------------------------------------------------------------------------- /redis/map.jinja: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=jinja 3 | 4 | {#- Start imports as #} 5 | {%- import_yaml 'redis/defaults.yaml' as default_settings %} 6 | {%- import_yaml 'redis/osfamilymap.yaml' as osfamilymap %} 7 | {%- import_yaml 'redis/osfingermap.yaml' as osfingermap %} 8 | 9 | {%- set defaults = salt['grains.filter_by'](default_settings, 10 | default='redis', 11 | merge=salt['grains.filter_by'](osfamilymap, grain='os_family', 12 | merge=salt['grains.filter_by'](osfingermap, grain='osfinger', 13 | merge=salt['pillar.get']('redis:lookup', default={}) 14 | ) 15 | ) 16 | ) %} 17 | 18 | {#- Merge the redis pillar #} 19 | {%- set redis_settings = salt['pillar.get']('redis', default=defaults, merge=True) %} 20 | -------------------------------------------------------------------------------- /release-rules.js: -------------------------------------------------------------------------------- 1 | // No release is triggered for the types commented out below. 2 | // Commits using these types will be incorporated into the next release. 3 | // 4 | // NOTE: Any changes here must be reflected in `CONTRIBUTING.md`. 5 | module.exports = [ 6 | {breaking: true, release: 'major'}, 7 | // {type: 'build', release: 'patch'}, 8 | // {type: 'chore', release: 'patch'}, 9 | // {type: 'ci', release: 'patch'}, 10 | {type: 'docs', release: 'patch'}, 11 | {type: 'feat', release: 'minor'}, 12 | {type: 'fix', release: 'patch'}, 13 | {type: 'perf', release: 'patch'}, 14 | {type: 'refactor', release: 'patch'}, 15 | {type: 'revert', release: 'patch'}, 16 | {type: 'style', release: 'patch'}, 17 | {type: 'test', release: 'patch'}, 18 | ]; 19 | -------------------------------------------------------------------------------- /redis/_mapdata/init.sls: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=sls 3 | --- 4 | {#- Get the `tplroot` from `tpldir` #} 5 | {%- set tplroot = tpldir.split("/")[0] %} 6 | {%- from tplroot ~ "/map.jinja" import redis_settings with context %} 7 | 8 | {%- set _mapdata = { 9 | "values": redis_settings, 10 | } %} 11 | {%- do salt["log.debug"]("### MAP.JINJA DUMP ###\n" ~ _mapdata | yaml(False)) %} 12 | 13 | {%- set output_dir = "/temp" if grains.os_family == "Windows" else "/tmp" %} 14 | {%- set output_file = output_dir ~ "/salt_mapdata_dump.yaml" %} 15 | 16 | {{ tplroot }}-mapdata-dump: 17 | file.managed: 18 | - name: {{ output_file }} 19 | - source: salt://{{ tplroot }}/_mapdata/_mapdata.jinja 20 | - template: jinja 21 | - context: 22 | map: {{ _mapdata | yaml }} 23 | -------------------------------------------------------------------------------- /test/integration/default/inspec.yml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | name: default 5 | title: redis formula 6 | maintainer: SaltStack Formulas 7 | license: Apache-2.0 8 | summary: Verify that the redis formula is setup and configured correctly 9 | depends: 10 | - name: share 11 | path: test/integration/share 12 | supports: 13 | - platform-name: debian 14 | - platform-name: ubuntu 15 | - platform-name: centos 16 | - platform-name: fedora 17 | - platform-name: opensuse 18 | - platform-name: suse 19 | - platform-name: freebsd 20 | - platform-name: openbsd 21 | - platform-name: amazon 22 | - platform-name: oracle 23 | - platform-name: arch 24 | - platform-name: gentoo 25 | - platform-name: almalinux 26 | - platform-name: rocky 27 | - platform-name: mac_os_x 28 | - platform: windows 29 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | source ENV.fetch('PROXY_RUBYGEMSORG', 'https://rubygems.org') 4 | 5 | # Install the `inspec` gem using `git` because versions after `4.22.22` 6 | # suppress diff output; this version fixes this for our uses. 7 | # rubocop:disable Layout/LineLength 8 | gem 'inspec', git: 'https://gitlab.com/saltstack-formulas/infrastructure/inspec', branch: 'ssf' 9 | # rubocop:enable Layout/LineLength 10 | 11 | # Install the `kitchen-docker` gem using `git` in order to gain a performance 12 | # improvement: avoid package installations which are already covered by the 13 | # `salt-image-builder` (i.e. the pre-salted images that we're using) 14 | # rubocop:disable Layout/LineLength 15 | gem 'kitchen-docker', git: 'https://gitlab.com/saltstack-formulas/infrastructure/kitchen-docker', branch: 'ssf' 16 | # rubocop:enable Layout/LineLength 17 | 18 | gem 'kitchen-inspec', '>= 2.5.0' 19 | gem 'kitchen-salt', '>= 0.7.2' 20 | -------------------------------------------------------------------------------- /bin/kitchen: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'kitchen' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | require 'pathname' 12 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', 13 | Pathname.new(__FILE__).realpath) 14 | 15 | bundle_binstub = File.expand_path('bundle', __dir__) 16 | 17 | if File.file?(bundle_binstub) 18 | if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ 19 | load(bundle_binstub) 20 | else 21 | abort( 22 | 'Your `bin/bundle` was not generated by Bundler, ' \ 23 | 'so this binstub cannot run. Replace `bin/bundle` by running ' \ 24 | '`bundle binstubs bundler --force`, then run this command again.' 25 | ) 26 | end 27 | end 28 | 29 | require 'rubygems' 30 | require 'bundler/setup' 31 | 32 | load Gem.bin_path('test-kitchen', 'kitchen') 33 | -------------------------------------------------------------------------------- /pre-commit_semantic-release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ############################################################################### 4 | # (A) Update `FORMULA` with `${nextRelease.version}` 5 | ############################################################################### 6 | sed -i -e "s_^\(version:\).*_\1 ${1}_" FORMULA 7 | 8 | 9 | ############################################################################### 10 | # (B) Use `m2r2` to convert automatically produced `.md` docs to `.rst` 11 | ############################################################################### 12 | 13 | # Install `m2r2` 14 | pip3 install m2r2 15 | 16 | # Copy and then convert the `.md` docs 17 | cp ./*.md docs/ 18 | cd docs/ || exit 19 | m2r2 --overwrite ./*.md 20 | 21 | # Change excess `H1` headings to `H2` in converted `CHANGELOG.rst` 22 | sed -i -e '/^=.*$/s/=/-/g' CHANGELOG.rst 23 | sed -i -e '1,4s/-/=/g' CHANGELOG.rst 24 | 25 | # Use for debugging output, when required 26 | # cat AUTHORS.rst 27 | # cat CHANGELOG.rst 28 | 29 | # Return back to the main directory 30 | cd .. 31 | -------------------------------------------------------------------------------- /redis/server/clean.sls: -------------------------------------------------------------------------------- 1 | 2 | {%- from "redis/map.jinja" import redis_settings as r with context %} 3 | 4 | redis-server-service-clean: 5 | service.dead: 6 | {%- if r.install_from in ('source', 'archive') %} 7 | - name: {{ r.svc_name }}_{{ r.port }} 8 | {%- else %} 9 | - name: {{ r.svc_name }} 10 | {%- endif %} 11 | - enable: false 12 | - require_in: 13 | - user: redis-server-clean 14 | - file: redis-server-clean 15 | 16 | redis-server-clean: 17 | {%- if r.install_from in ('source', 'archive') %} 18 | 19 | user.absent: 20 | - name: {{ r.user }} 21 | group.absent: 22 | - name: {{ r.group }} 23 | - require: 24 | - user: redis-server-clean 25 | file.absent: 26 | - names: 27 | - /etc/init/redis-server.conf 28 | - {{ r.cfg_name }} 29 | - /etc/init.d/redis 30 | - {{ r.root|default('/usr/local') }} 31 | - /etc/redis 32 | - {{ r.dir.log }} 33 | - {{ r.dir.service }}/redis* 34 | - /var/run/redis 35 | - /var/run/redis_6379.pid 36 | 37 | {%- else %} 38 | 39 | pkg.removed: 40 | - name: {{ r.pkg_name }} 41 | 42 | {%- endif %} 43 | -------------------------------------------------------------------------------- /test/integration/default/README.md: -------------------------------------------------------------------------------- 1 | # InSpec Profile: `default` 2 | 3 | This shows the implementation of the `default` InSpec [profile](https://github.com/inspec/inspec/blob/master/docs/profiles.md). 4 | 5 | ## Verify a profile 6 | 7 | InSpec ships with built-in features to verify a profile structure. 8 | 9 | ```bash 10 | $ inspec check default 11 | Summary 12 | ------- 13 | Location: default 14 | Profile: profile 15 | Controls: 4 16 | Timestamp: 2019-06-24T23:09:01+00:00 17 | Valid: true 18 | 19 | Errors 20 | ------ 21 | 22 | Warnings 23 | -------- 24 | ``` 25 | 26 | ## Execute a profile 27 | 28 | To run all **supported** controls on a local machine use `inspec exec /path/to/profile`. 29 | 30 | ```bash 31 | $ inspec exec default 32 | .. 33 | 34 | Finished in 0.0025 seconds (files took 0.12449 seconds to load) 35 | 8 examples, 0 failures 36 | ``` 37 | 38 | ## Execute a specific control from a profile 39 | 40 | To run one control from the profile use `inspec exec /path/to/profile --controls name`. 41 | 42 | ```bash 43 | $ inspec exec default --controls package 44 | . 45 | 46 | Finished in 0.0025 seconds (files took 0.12449 seconds to load) 47 | 1 examples, 0 failures 48 | ``` 49 | 50 | See an [example control here](https://github.com/inspec/inspec/blob/master/examples/profile/controls/example.rb). 51 | -------------------------------------------------------------------------------- /test/integration/share/README.md: -------------------------------------------------------------------------------- 1 | # InSpec Profile: `share` 2 | 3 | This shows the implementation of the `share` InSpec [profile](https://github.com/inspec/inspec/blob/master/docs/profiles.md). 4 | 5 | Its goal is to share the libraries between all profiles. 6 | 7 | ## Libraries 8 | 9 | ### `system` 10 | 11 | The `system` library provides easy access to system dependent information: 12 | 13 | - `system.platform`: based on `inspec.platform`, modify to values that are more consistent from a SaltStack perspective 14 | - `system.platform[:family]` provide a family name for Arch and Gentoo 15 | - `system.platform[:name]` append `linux` to both `amazon` and `oracle`; ensure Windows platforms are resolved as simply `windows` 16 | - `system.platform[:release]` tweak Arch, Amazon Linux, Gentoo, openSUSE and Windows: 17 | - `Arch` is always `base-latest` 18 | - `Amazon Linux` release `2018` is resolved as `1` 19 | - `Gentoo` release is trimmed to its major version number and then the init system is appended (i.e. `sysv` or `sysd`) 20 | - `openSUSE` is resolved as `tumbleweed` if the `platform[:release]` is in date format 21 | - `Windows` uses the widely-used release number (e.g. `8.1` or `2019-server`) in place of the actual system release version 22 | - `system.platform[:finger]` is the concatenation of the name and the major release number (except for Ubuntu, which gives `ubuntu-20.04` for example) 23 | -------------------------------------------------------------------------------- /.yamllint: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | # Extend the `default` configuration provided by `yamllint` 5 | extends: 'default' 6 | 7 | # Files to ignore completely 8 | # 1. All YAML files under directory `.bundle/`, introduced if gems are installed locally 9 | # 2. All YAML files under directory `.cache/`, introduced during the CI run 10 | # 3. All YAML files under directory `.git/` 11 | # 4. All YAML files under directory `node_modules/`, introduced during the CI run 12 | # 5. Any SLS files under directory `test/`, which are actually state files 13 | # 6. Any YAML files under directory `.kitchen/`, introduced during local testing 14 | # 7. `kitchen.vagrant.yml`, which contains Embedded Ruby (ERB) template syntax 15 | ignore: | 16 | .bundle/ 17 | .cache/ 18 | .git/ 19 | node_modules/ 20 | test/**/states/**/*.sls 21 | .kitchen/ 22 | kitchen.vagrant.yml 23 | 24 | yaml-files: 25 | # Default settings 26 | - '*.yaml' 27 | - '*.yml' 28 | - .salt-lint 29 | - .yamllint 30 | # SaltStack Formulas additional settings 31 | - '*.example' 32 | - test/**/*.sls 33 | 34 | rules: 35 | empty-values: 36 | forbid-in-block-mappings: true 37 | forbid-in-flow-mappings: true 38 | line-length: 39 | # Increase from default of `80` 40 | # Based on https://github.com/PyCQA/flake8-bugbear#opinionated-warnings (`B950`) 41 | max: 88 42 | octal-values: 43 | forbid-implicit-octal: true 44 | forbid-explicit-octal: true 45 | -------------------------------------------------------------------------------- /redis/osfamilymap.yaml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | Debian: 5 | pkg_name: redis-server 6 | python_dev_package: python-dev 7 | svc_name: redis-server 8 | logfile: /var/log/redis/redis-server.log 9 | pidfile: /var/run/redis/redis-server.pid 10 | sentinel_pkg: redis-sentinel 11 | sentinel_service: redis-sentinel 12 | sentinel_cfg: /etc/redis/sentinel.conf 13 | sentinel_logfile: /var/log/redis/redis-sentinel.log 14 | sentinel: 15 | pidfile: /run/sentinel/redis-sentinel.pid 16 | RedHat: 17 | pkg_name: redis 18 | python_dev_package: python-devel 19 | cfg_name: /etc/redis.conf 20 | cfg_version: '3.0' 21 | logfile: /var/log/redis/redis.log 22 | pidfile: /var/run/redis.pid 23 | sentinel_pkg: redis 24 | sentinel_service: redis-sentinel 25 | sentinel_cfg: /etc/redis-sentinel.conf 26 | sentinel_logfile: /var/log/redis/sentinel.log 27 | sentinel: 28 | pidfile: /var/run/redis/sentinel.pid 29 | Arch: 30 | pkg_name: redis 31 | cfg_name: /etc/redis.conf 32 | cfg_version: '3.0' 33 | logfile: /var/log/redis/redis.log 34 | pidfile: /var/run/redis.pid 35 | daemonize: 'no' 36 | FreeBSD: 37 | pkg_name: redis 38 | cfg_name: /usr/local/etc/redis.conf 39 | cfg_version: '3.0' 40 | logfile: /var/log/redis/redis.log 41 | pidfile: /var/run/redis/redis.pid 42 | overcommit_memory: false 43 | root_dir: /var/db/redis 44 | Suse: 45 | cfg_name: /etc/redis/default.conf 46 | pkg_name: redis 47 | python_dev_package: python-devel 48 | logfile: /var/log/redis/default.log 49 | pidfile: /var/run/redis/default.pid 50 | daemonize: 'no' 51 | sentinel_pkg: redis 52 | sentinel_service: redis-sentinel 53 | sentinel_cfg: /etc/redis-sentinel.conf 54 | sentinel_logfile: /var/log/redis/sentinel.log 55 | sentinel: 56 | pidfile: /var/run/redis/sentinel.pid 57 | svc_name: redis@default 58 | disable_transparent_huge_pages: true 59 | -------------------------------------------------------------------------------- /redis/files/redis_initd.jinja: -------------------------------------------------------------------------------- 1 | #/bin/sh 2 | #Configurations injected by install_server below.... 3 | 4 | EXEC=/usr/sbin/redis-server 5 | CLIEXEC=/usr/bin/redis-cli 6 | PIDFILE=/var/run/redis.pid 7 | CONF="/etc/redis.conf" 8 | REDISPORT="6379" 9 | ############### 10 | # SysV Init Information 11 | # chkconfig: - 58 74 12 | # description: redis_6379 is the redis daemon. 13 | ### BEGIN INIT INFO 14 | # Provides: redis_6379 15 | # Required-Start: $network $local_fs $remote_fs 16 | # Required-Stop: $network $local_fs $remote_fs 17 | # Default-Start: 2 3 4 5 18 | # Default-Stop: 0 1 6 19 | # Should-Start: $syslog $named 20 | # Should-Stop: $syslog $named 21 | # Short-Description: start and stop redis_6379 22 | # Description: Redis daemon 23 | ### END INIT INFO 24 | 25 | 26 | case "$1" in 27 | start) 28 | if [ -f $PIDFILE ] 29 | then 30 | echo "$PIDFILE exists, process is already running or crashed" 31 | else 32 | echo "Starting Redis server..." 33 | $EXEC $CONF 34 | fi 35 | ;; 36 | stop) 37 | if [ ! -f $PIDFILE ] 38 | then 39 | echo "$PIDFILE does not exist, process is not running" 40 | else 41 | PID=$(cat $PIDFILE) 42 | echo "Stopping ..." 43 | $CLIEXEC -p $REDISPORT shutdown 44 | while [ -x /proc/${PID} ] 45 | do 46 | echo "Waiting for Redis to shutdown ..." 47 | sleep 1 48 | done 49 | echo "Redis stopped" 50 | fi 51 | ;; 52 | status) 53 | if [ ! -f $PIDFILE ] 54 | then 55 | echo 'Redis is not running' 56 | else 57 | echo "Redis is running ($(<$PIDFILE))" 58 | fi 59 | ;; 60 | restart) 61 | $0 stop 62 | $0 start 63 | ;; 64 | *) 65 | echo "Please use start, stop, restart or status as first argument" 66 | ;; 67 | esac 68 | -------------------------------------------------------------------------------- /redis/instances.sls: -------------------------------------------------------------------------------- 1 | {% from "redis/map.jinja" import redis_settings with context %} 2 | 3 | include: 4 | - redis.server 5 | 6 | {% set cfg_version = redis_settings.cfg_version -%} 7 | {% set install_from = redis_settings.install_from -%} 8 | {% set user = redis_settings.user -%} 9 | {% set group = redis_settings.group -%} 10 | 11 | redis_systemd_template: 12 | file.managed: 13 | - name: {{ redis_settings.dir.service }}/redis-server@.service 14 | - replace: False 15 | - source: salt://redis/files/redis-server@.service 16 | 17 | {% for instance_name, instance_options in redis_settings.instances|default({})|dictsort %} 18 | {% if instance_name != '_default' %} 19 | {% set config = {} %} 20 | {% do config.update(redis_settings) %} 21 | {% for key, value in redis_settings.instances.get('_default')|dictsort %} 22 | {% do config.update({key: (value|string).format(name=instance_name)}) %} 23 | {% endfor %} 24 | {% do config.update(instance_options) %} 25 | 26 | redis_root_dir {{ instance_name }}: 27 | file.directory: 28 | - name: {{ config.root_dir }} 29 | - mode: 755 30 | - user: {{ user }} 31 | - group: {{ group }} 32 | - makedirs: True 33 | - require_in: 34 | - service: redis_service {{ instance_name }} 35 | 36 | redis_config {{ instance_name }}: 37 | file.managed: 38 | - name: {{ config.cfg_name }} 39 | - template: jinja 40 | {% if redis_settings.source_path is not defined %} 41 | - source: salt://redis/files/redis-{{ cfg_version }}.conf.multi.jinja 42 | {% else %} 43 | - source: {{ config.source_path }} 44 | {% endif %} 45 | - defaults: 46 | redis_settings: {{ config|json }} 47 | 48 | redis_service {{ instance_name }}: 49 | service.{{ config.svc_state }}: 50 | {% if install_from == 'source' %} 51 | - name: {{ config.svc_name }}_{{ config.port }} 52 | {% else %} 53 | - name: {{ config.svc_name }} 54 | {% endif %} 55 | - enable: {{ config.svc_onboot }} 56 | - require: 57 | - file: redis_systemd_template 58 | - watch: 59 | - file: {{ config.cfg_name }} 60 | {% endif %} 61 | {% endfor %} 62 | -------------------------------------------------------------------------------- /redis/defaults.yaml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | redis: 5 | instances: 6 | _default: 7 | cfg_name: /etc/redis/redis-{name}.conf 8 | svc_name: redis-server@{name} 9 | pidfile: /var/run/redis-{name}/redis-server.pid 10 | logfile: /var/log/redis/redis-server-{name}.log 11 | dbfilename: dump-{name}.rdb 12 | svc_state: running 13 | svc_onboot: true 14 | dir: 15 | log: /var/log/redis 16 | service: /usr/lib/systemd/system 17 | appendfilename: appendonly.aof 18 | appendonly: 'no' 19 | appendfsync: everysec 20 | auto_aof_rewrite_min_size: 64mb 21 | auto_aof_rewrite_percentage: 100 22 | aof_load_truncated: 'yes' 23 | bin: /usr/local/bin/redis-server 24 | bind: 127.0.0.1 25 | cfg_name: /etc/redis/redis.conf 26 | cfg_version: '3.2' 27 | database_count: 16 28 | root_dir: /var/lib/redis 29 | dbfilename: dump.rdb 30 | daemonize: 'yes' 31 | group: redis 32 | home: /var/lib/redis 33 | install_from: package 34 | latency_monitor_threshold: 0 35 | loglevel: notice 36 | lua_time_limit: 5000 37 | maxmemory_policy: volatile-lru 38 | maxmemory_samples: 3 39 | notify_keyspace_events: '""' 40 | no_appendfsync_on_rewrite: 'no' 41 | port: 6379 42 | rdbchecksum: 'yes' 43 | rdbcompression: 'yes' 44 | repl_disable_tcp_nodelay: 'no' 45 | slave_priority: 100 46 | slave_read_only: 'yes' 47 | repl_diskless_sync: 'no' 48 | repl_diskless_sync_delay: 5 49 | slave_serve_stale_data: 'yes' 50 | slowlog_max_len: 128 51 | slowlog_log_slower_than: 10000 52 | snapshots: 53 | - '900 1' 54 | - '300 10' 55 | - '60 10000' 56 | stop_writes_on_bgsave_error: 'yes' 57 | svc_onboot: true 58 | svc_name: redis 59 | svc_state: running 60 | timeout: 0 61 | tcp_backlog: 511 62 | tcp_keepalive: 0 63 | unixsocketperm: 755 64 | user: redis 65 | overcommit_memory: true 66 | sentinel: 67 | port: 26379 68 | dir: /var/lib/redis 69 | user: redis 70 | group: redis 71 | pidfile: /var/run/redis/sentinel.pid 72 | daemonize: 'yes' 73 | 74 | retry_option: 75 | # https://docs.saltstack.com/en/latest/ref/states/requisites.html#retrying-states 76 | attempts: 2 77 | until: true 78 | interval: 60 79 | splay: 10 80 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a packager 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .kitchen 49 | .kitchen.local.yml 50 | kitchen.local.yml 51 | junit-*.xml 52 | 53 | # Translations 54 | *.mo 55 | *.pot 56 | 57 | # Django stuff: 58 | *.log 59 | local_settings.py 60 | 61 | # Flask stuff: 62 | instance/ 63 | .webassets-cache 64 | 65 | # Scrapy stuff: 66 | .scrapy 67 | 68 | # Sphinx documentation 69 | docs/_build/ 70 | 71 | # PyBuilder 72 | target/ 73 | 74 | # Jupyter Notebook 75 | .ipynb_checkpoints 76 | 77 | # pyenv 78 | .python-version 79 | 80 | # celery beat schedule file 81 | celerybeat-schedule 82 | 83 | # SageMath parsed files 84 | *.sage.py 85 | 86 | # dotenv 87 | .env 88 | 89 | # virtualenv 90 | .venv 91 | venv/ 92 | ENV/ 93 | 94 | # visual studio 95 | .vs/ 96 | 97 | # Spyder project settings 98 | .spyderproject 99 | .spyproject 100 | 101 | # Rope project settings 102 | .ropeproject 103 | 104 | # mkdocs documentation 105 | /site 106 | 107 | # mypy 108 | .mypy_cache/ 109 | 110 | # Bundler 111 | .bundle/ 112 | 113 | # copied `.md` files used for conversion to `.rst` using `m2r` 114 | docs/*.md 115 | 116 | # Vim 117 | *.sw? 118 | 119 | ## Collected when centralising formulas (check and sort) 120 | # `collectd-formula` 121 | .pytest_cache/ 122 | /.idea/ 123 | Dockerfile.*_* 124 | ignore/ 125 | tmp/ 126 | 127 | # `salt-formula` -- Vagrant Specific files 128 | .vagrant 129 | top.sls 130 | !test/salt/pillar/top.sls 131 | 132 | # `suricata-formula` -- Platform binaries 133 | *.rpm 134 | *.deb 135 | -------------------------------------------------------------------------------- /redis/files/redis-sentinel_initd.jinja: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | # 4 | # This file is managed by salt. Do not edit by hand. 5 | # 6 | 7 | ### BEGIN INIT INFO 8 | # Provides: redis-sentinel 9 | # Required-Start: $syslog $remote_fs 10 | # Required-Stop: $syslog $remote_fs 11 | # Should-Start: $local_fs 12 | # Should-Stop: $local_fs 13 | # Default-Start: 2 3 4 5 14 | # Default-Stop: 0 1 6 15 | # Short-Description: redis-sentinel - Persistent key-value db 16 | # Description: redis-sentinel - Persistent key-value db 17 | ### END INIT INFO 18 | 19 | {% from "redis/map.jinja" import redis_settings with context %} 20 | 21 | PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 22 | DAEMON=/usr/bin/{{ redis_settings.sentinel_service }} 23 | DAEMON_ARGS={{ redis_settings.sentinel_cfg }} 24 | NAME=redis-sentinel 25 | DESC=redis-sentinel 26 | 27 | RUNDIR=/var/run/redis 28 | PIDFILE=${RUNDIR}/redis-sentinel.pid 29 | 30 | test -x ${DAEMON} || exit 0 31 | 32 | if [ -r /etc/default/${NAME} ] 33 | then 34 | . /etc/default/${NAME} 35 | fi 36 | 37 | . /lib/lsb/init-functions 38 | 39 | set -e 40 | 41 | case "${1}" in 42 | start) 43 | echo -n "Starting ${DESC}: " 44 | mkdir -p ${RUNDIR} 45 | touch ${PIDFILE} 46 | chown redis:redis ${RUNDIR} ${PIDFILE} 47 | chmod 755 ${RUNDIR} 48 | 49 | if [ -n "${ULIMIT}" ] 50 | then 51 | ulimit -n ${ULIMIT} 52 | fi 53 | 54 | if start-stop-daemon --start --quiet --umask 007 --pidfile ${PIDFILE} --chuid redis:redis --exec ${DAEMON} -- ${DAEMON_ARGS} 55 | then 56 | echo "${NAME}." 57 | else 58 | echo "failed" 59 | fi 60 | ;; 61 | stop) 62 | echo -n "Stopping ${DESC}: " 63 | if start-stop-daemon --stop --retry forever/TERM/1 --quiet --oknodo --pidfile ${PIDFILE} --exec ${DAEMON} 64 | then 65 | echo "${NAME}." 66 | else 67 | echo "failed" 68 | fi 69 | rm -f ${PIDFILE} 70 | sleep 1 71 | ;; 72 | 73 | restart|force-reload) 74 | ${0} stop 75 | ${0} start 76 | ;; 77 | 78 | status) 79 | echo -n "${DESC} is " 80 | if start-stop-daemon --stop --quiet --signal 0 --name ${NAME} --pidfile ${PIDFILE} 81 | then 82 | echo "running" 83 | else 84 | echo "not running" 85 | exit 1 86 | fi 87 | ;; 88 | 89 | *) 90 | echo "Usage: /etc/init.d/${NAME} {start|stop|restart|force-reload|status}" >&2 91 | exit 1 92 | ;; 93 | esac 94 | 95 | exit 0 96 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | # See https://pre-commit.com for more information 5 | # See https://pre-commit.com/hooks.html for more hooks 6 | ci: 7 | autofix_commit_msg: | 8 | ci(pre-commit.ci): apply auto fixes from pre-commit.com hooks 9 | 10 | For more information, see https://pre-commit.ci 11 | autofix_prs: true 12 | autoupdate_branch: '' 13 | autoupdate_commit_msg: | 14 | ci(pre-commit.ci): perform `pre-commit` autoupdate 15 | autoupdate_schedule: quarterly 16 | skip: [] 17 | submodules: false 18 | default_stages: [commit] 19 | repos: 20 | - repo: https://github.com/dafyddj/commitlint-pre-commit-hook 21 | rev: v2.3.0 22 | hooks: 23 | - id: commitlint 24 | name: Check commit message using commitlint 25 | description: Lint commit message against @commitlint/config-conventional rules 26 | stages: [commit-msg] 27 | additional_dependencies: ['@commitlint/config-conventional@8.3.4'] 28 | - id: commitlint-travis 29 | stages: [manual] 30 | additional_dependencies: ['@commitlint/config-conventional@8.3.4'] 31 | always_run: true 32 | - repo: https://github.com/rubocop-hq/rubocop 33 | rev: v1.30.1 34 | hooks: 35 | - id: rubocop 36 | name: Check Ruby files with rubocop 37 | args: [--debug] 38 | always_run: true 39 | pass_filenames: false 40 | - repo: https://github.com/shellcheck-py/shellcheck-py 41 | rev: v0.8.0.4 42 | hooks: 43 | - id: shellcheck 44 | name: Check shell scripts with shellcheck 45 | files: ^.*\.(sh|bash|ksh)$ 46 | types: [] 47 | - repo: https://github.com/adrienverge/yamllint 48 | rev: v1.26.3 49 | hooks: 50 | - id: yamllint 51 | name: Check YAML syntax with yamllint 52 | args: [--strict, '.'] 53 | always_run: true 54 | pass_filenames: false 55 | - repo: https://github.com/warpnet/salt-lint 56 | rev: v0.8.0 57 | hooks: 58 | - id: salt-lint 59 | name: Check Salt files using salt-lint 60 | files: ^.*\.(sls|jinja|j2|tmpl|tst)$ 61 | - repo: https://github.com/myint/rstcheck 62 | rev: 3f929574 63 | hooks: 64 | - id: rstcheck 65 | name: Check reST files using rstcheck 66 | exclude: 'docs/CHANGELOG.rst' 67 | - repo: https://github.com/saltstack-formulas/mirrors-rst-lint 68 | rev: v1.3.2 69 | hooks: 70 | - id: rst-lint 71 | name: Check reST files using rst-lint 72 | exclude: | 73 | (?x)^( 74 | docs/CHANGELOG.rst| 75 | docs/TOFS_pattern.rst| 76 | )$ 77 | additional_dependencies: [pygments==2.9.0] 78 | -------------------------------------------------------------------------------- /redis/files/redis-server@.service: -------------------------------------------------------------------------------- 1 | # Templated service file for redis-server(1) 2 | # 3 | # Each instance of redis-server requires its own configuration file: 4 | # 5 | # $ cp /etc/redis/redis.conf /etc/redis/redis-myname.conf 6 | # $ chown redis:redis /etc/redis/redis-myname.conf 7 | # 8 | # Ensure each instance is using their own database: 9 | # 10 | # $ sed -i -e 's@^dbfilename .*@dbfilename dump-myname.rdb@' /etc/redis/redis-myname.conf 11 | # 12 | # We then listen exlusively on UNIX sockets to avoid TCP port collisions: 13 | # 14 | # $ sed -i -e 's@^port .*@port 0@' /etc/redis/redis-myname.conf 15 | # $ sed -i -e 's@^\(# \)\{0,1\}unixsocket .*@unixsocket /var/run/redis-myname/redis-server.sock@' /etc/redis/redis-myname.conf 16 | # 17 | # ... and ensure we are logging, etc. in a unique location: 18 | # 19 | # $ sed -i -e 's@^logfile .*@logfile /var/log/redis/redis-server-myname.log@' /etc/redis/redis-myname.conf 20 | # $ sed -i -e 's@^pidfile .*@pidfile /run/redis-myname/redis-server.pid@' /etc/redis/redis-myname.conf 21 | # 22 | # We can then start the service as follows, validating we are using our own 23 | # configuration: 24 | # 25 | # $ systemctl start redis-server@myname.service 26 | # $ redis-cli -s /var/run/redis-myname/redis-server.sock info | grep config_file 27 | # 28 | # -- Chris Lamb Mon, 09 Oct 2017 22:17:24 +0100 29 | [Unit] 30 | Description=Advanced key-value store (%I) 31 | After=network.target 32 | Documentation=http://redis.io/documentation, man:redis-server(1) 33 | 34 | [Service] 35 | Type=forking 36 | ExecStart=/usr/bin/redis-server /etc/redis/redis-%i.conf 37 | ExecStop=/bin/kill -s TERM $MAINPID 38 | PIDFile=/run/redis-%i/redis-server.pid 39 | TimeoutStopSec=0 40 | Restart=always 41 | User=redis 42 | Group=redis 43 | RuntimeDirectory=redis-%i 44 | RuntimeDirectoryMode=2755 45 | 46 | UMask=007 47 | PrivateTmp=yes 48 | LimitNOFILE=65535 49 | PrivateDevices=yes 50 | ProtectHome=yes 51 | ReadOnlyDirectories=/ 52 | ReadWriteDirectories=-/var/lib/redis 53 | ReadWriteDirectories=-/var/log/redis 54 | ReadWriteDirectories=-/var/run/redis-%i 55 | 56 | NoNewPrivileges=true 57 | CapabilityBoundingSet=CAP_SETGID CAP_SETUID CAP_SYS_RESOURCE 58 | MemoryDenyWriteExecute=true 59 | ProtectKernelModules=true 60 | ProtectKernelTunables=true 61 | ProtectControlGroups=true 62 | RestrictRealtime=true 63 | RestrictNamespaces=true 64 | RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX 65 | 66 | # redis-server can write to its own config file when in cluster mode so we 67 | # permit writing there by default. If you are not using this feature, it is 68 | # recommended that you replace the following lines with "ProtectSystem=full". 69 | ProtectSystem=true 70 | ReadWriteDirectories=-/etc/redis 71 | 72 | [Install] 73 | WantedBy=multi-user.target 74 | -------------------------------------------------------------------------------- /redis/sentinel.sls: -------------------------------------------------------------------------------- 1 | {% from "redis/map.jinja" import redis_settings with context %} 2 | 3 | redis_sentinel_install: 4 | pkg.installed: 5 | - name: {{ redis_settings.sentinel_pkg }} 6 | 7 | redis_sentinel_config: 8 | file.managed: 9 | - name: {{ redis_settings.sentinel_cfg }} 10 | - template: jinja 11 | {% if redis_settings.sentinel.source_path is not defined %} 12 | - source: salt://redis/files/redis-sentinel.conf.jinja 13 | {% else %} 14 | - source: {{ redis_settings.sentinel.source_path }} 15 | {% endif %} 16 | - user: {{ redis_settings.sentinel.user }} 17 | - group: {{ redis_settings.sentinel.group }} 18 | - watch_in: 19 | - service: redis_sentinel_service 20 | 21 | {% if redis_settings.sentinel.masters is defined %} 22 | {% for master,master_opts in redis_settings.sentinel.masters.items() %} 23 | {% if master_opts['notification-script'] is defined and master_opts['notification-script'].source_path is defined %} 24 | 25 | redis_sentinel_{{ master }}_notification_script: 26 | file.managed: 27 | - name: {{ master_opts['notification-script'].path }} 28 | - source: {{ master_opts['notification-script'].source_path }} 29 | - mode: '755' 30 | - template: jinja 31 | 32 | {% endif %} 33 | {% if master_opts['client-reconfig-script'] is defined and master_opts['client-reconfig-script'].source_path is defined %} 34 | 35 | redis_sentinel_{{ master }}_client_reconfig_script: 36 | file.managed: 37 | - name: {{ master_opts['client-reconfig-script'].path }} 38 | - source: {{ master_opts['client-reconfig-script'].source_path }} 39 | - mode: '755' 40 | - template: jinja 41 | 42 | {% endif %} 43 | {% endfor %} 44 | {% endif %} 45 | 46 | {% if grains['os'] == 'Ubuntu' and ( grains['osmajorrelease'] == 14 or grains['osmajorrelease'] == '14' ) %} 47 | 48 | redis_sentinel_init: 49 | file.managed: 50 | - name: /etc/init.d/redis-sentinel 51 | - template: jinja 52 | - source: salt://redis/files/redis-sentinel_initd.jinja 53 | - mode: '755' 54 | - user: root 55 | - group: root 56 | 57 | {% endif %} 58 | 59 | redis_sentinel_piddir: 60 | file.directory: 61 | - name: {{ salt['file.dirname'](redis_settings.sentinel.pidfile) }} 62 | - user: redis 63 | - group: redis 64 | - makedirs: True 65 | 66 | redis_sentinel_service: 67 | {% if redis_settings.sentinel.enabled is defined and redis_settings.sentinel.enabled %} 68 | service.running: 69 | - name: {{ redis_settings.sentinel_service }} 70 | - enable: True 71 | {% elif redis_settings.sentinel.enabled is defined and not redis_settings.sentinel.enabled %} 72 | service.dead: 73 | - name: {{ redis_settings.sentinel_service }} 74 | - enable: False 75 | {% endif %} 76 | -------------------------------------------------------------------------------- /redis/files/redis-sentinel.conf.jinja: -------------------------------------------------------------------------------- 1 | # 2 | # This file is managed by salt. Do not edit by hand. 3 | # 4 | 5 | {%- from "redis/map.jinja" import redis_settings with context %} 6 | 7 | {%- if redis_settings.sentinel.daemonize is defined %} 8 | daemonize {{ redis_settings.sentinel.daemonize }} 9 | {%- endif %} 10 | {%- if redis_settings.sentinel.pidfile is defined %} 11 | pidfile {{ redis_settings.sentinel.pidfile }} 12 | {%- endif %} 13 | {%- if redis_settings.sentinel.bind is defined %} 14 | bind {{ redis_settings.sentinel.bind }} 15 | {%- endif %} 16 | {%- if redis_settings.sentinel['protected-mode'] is defined %} 17 | protected-mode {{ redis_settings.sentinel['protected-mode'] }} 18 | {%- endif %} 19 | port {{ redis_settings.sentinel.port }} 20 | logfile {{ redis_settings.sentinel_logfile }} 21 | {%- if redis_settings.sentinel['announce-ip'] is defined %} 22 | announce-ip {{ redis_settings.sentinel['announce-ip'] }} 23 | {%- endif %} 24 | {%- if redis_settings.sentinel['announce-port'] is defined %} 25 | announce-port {{ redis_settings.sentinel['announce-port'] }} 26 | {%- endif %} 27 | {%- if redis_settings.sentinel.dir is defined %} 28 | dir {{ redis_settings.sentinel.dir }} 29 | {%- endif %} 30 | {%- if redis_settings.sentinel.masters is defined %} 31 | {%- for master,master_options in redis_settings.sentinel.masters.items() %} 32 | sentinel monitor {{ master }} {{ master_options.ip }} {{ master_options.port|default('6379') }} {{ master_options.quorum|default('2') }} 33 | {%- if master_options['down-after-milliseconds'] is defined %} 34 | sentinel down-after-milliseconds {{ master }} {{ master_options['down-after-milliseconds'] }} 35 | {%- endif %} 36 | {%- if master_options['failover-timeout'] is defined %} 37 | sentinel failover-timeout {{ master }} {{ master_options['failover-timeout'] }} 38 | {%- endif %} 39 | {%- if master_options['parallel-syncs'] is defined %} 40 | sentinel parallel-syncs {{ master }} {{ master_options['parallel-syncs'] }} 41 | {%- endif %} 42 | {%- if master_options['auth-pass'] is defined %} 43 | sentinel auth-pass {{ master }} {{ master_options['auth-pass'] }} 44 | {%- endif %} 45 | {%- if master_options['notification-script'] is defined and master_options['notification-script'].path is defined %} 46 | sentinel notification-script {{ master }} {{ master_options['notification-script'].path }} 47 | {%- endif %} 48 | {%- if master_options['client-reconfig-script'] is defined and master_options['client-reconfig-script'].path is defined %} 49 | sentinel client-reconfig-script {{ master }} {{ master_options['client-reconfig-script'].path }} 50 | {%- endif %} 51 | {%- if master_options.extra_opts is defined %} 52 | {%- for option,value in master_options.extra_opts.items() %} 53 | sentinel {{ master }} {{ option }} {{ value }} 54 | {%- endfor %} 55 | {%- endif %} 56 | {%- endfor %} 57 | {%- endif %} 58 | {%- if redis_settings.sentinel.extra_opts is defined %} 59 | {%- for option,value in redis_settings.sentinel.extra_opts.items() %} 60 | {{ option }} {{ value }} 61 | {%- endfor %} 62 | {%- endif %} 63 | -------------------------------------------------------------------------------- /redis/server/install.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - redis.common 3 | 4 | {% from "redis/map.jinja" import redis_settings as r with context %} 5 | 6 | {%- if r.install_from in ('source', 'archive') %} 7 | 8 | redis_user_group: 9 | group.present: 10 | - name: {{ r.group }} 11 | user.present: 12 | - name: {{ r.user }} 13 | - usergroup: True 14 | - home: {{ r.home }} 15 | - require: 16 | - group: redis_user_group 17 | file.managed: 18 | - name: /etc/init/redis-server.conf 19 | - template: jinja 20 | - source: salt://redis/files/upstart.conf.jinja 21 | - mode: '0750' 22 | - user: root 23 | - group: root 24 | - makedirs: True 25 | - context: 26 | conf: /etc/redis/redis.conf 27 | user: {{ r.user }} 28 | bin: {{ r.bin }} 29 | - require: 30 | - sls: redis.common 31 | 32 | redis-log-dir: 33 | file.directory: 34 | - name: /var/log/redis 35 | - mode: 755 36 | - user: {{ r.user }} 37 | - group: {{ r.group }} 38 | - recurse: 39 | - user 40 | - group 41 | - mode 42 | - makedirs: True 43 | - require: 44 | - user: redis_user_group 45 | 46 | {%- endif %} 47 | 48 | redis_config: 49 | file.managed: 50 | - name: {{ r.cfg_name }} 51 | - template: jinja 52 | {% if r.source_path is not defined %} 53 | - source: salt://redis/files/redis-{{ r.cfg_version }}.conf.jinja 54 | {% else %} 55 | - source: {{ r.source_path }} 56 | {%- endif %} 57 | - makedirs: True 58 | 59 | {%- if r.install_from in ('source', 'archive') %} 60 | redis-initd: 61 | file.managed: 62 | - name: /etc/init.d/redis 63 | - template: jinja 64 | - source: salt://redis/files/redis_initd.jinja 65 | - mode: '0777' 66 | - user: root 67 | - group: root 68 | - require: 69 | - file: redis_config 70 | - require_in: 71 | - file: redis_service 72 | {%- endif %} 73 | 74 | {% if r.disable_transparent_huge_pages is defined and r.disable_transparent_huge_pages %} 75 | redis_disable_transparent_huge_pages: 76 | cmd.run: 77 | - name: echo "never" > /sys/kernel/mm/transparent_hugepage/enabled 78 | - unless: grep -i '^never' /sys/kernel/mm/transparent_hugepage/enabled 79 | {%- endif %} 80 | 81 | {%- if grains.os_family|lower == 'arch' %} 82 | redis_service_simple: 83 | file.replace: 84 | - name: {{ r.dir.service }}/redis.service 85 | - pattern: Type=notify 86 | - repl: Type=simple 87 | - onlyif: test -f {{ r.dir.service }}/redis.service 88 | - require_in: 89 | - service: redis_service 90 | cmd.run: 91 | - name: systemctl daemon-reload 92 | - onchanges: 93 | - file: redis_service_simple 94 | {%- endif %} 95 | 96 | redis_service: 97 | service.{{ r.svc_state }}: 98 | {% if r.install_from in ('source', 'archive') %} 99 | - name: {{ r.svc_name }}_{{ r.port }} 100 | {% else %} 101 | - name: {{ r.svc_name }} 102 | {% endif %} 103 | - enable: {{ r.svc_onboot }} 104 | - watch: 105 | - file: redis_config 106 | - retry: {{ r.retry_option|json }} 107 | 108 | {% if r.overcommit_memory == True %} 109 | redis_overcommit_memory: 110 | sysctl.present: 111 | - name: vm.overcommit_memory 112 | - value: 1 113 | {% if grains['os_family'] == 'Arch' %} 114 | - require_in: 115 | - service: redis_service 116 | {% endif %} 117 | {%- endif %} 118 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | # https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners 2 | 3 | # SECTION: Owner(s) for everything in the repo, unless a later match takes precedence 4 | # ************************************************************************** 5 | # *** NO GLOBAL OWNER(S) SPECIFIED *** 6 | # *** Ideally this will be defined for a healthy, well-maintained repo *** 7 | # ************************************************************************** 8 | # FILE PATTERN OWNER(S) 9 | * @NONE 10 | 11 | # SECTION: Owner(s) for specific directories 12 | # FILE PATTERN OWNER(S) 13 | 14 | # SECTION: Owner(s) for files/directories related to `semantic-release` 15 | # FILE PATTERN OWNER(S) 16 | /.github/workflows/ @saltstack-formulas/ssf 17 | /bin/install-hooks @saltstack-formulas/ssf 18 | /bin/kitchen @saltstack-formulas/ssf 19 | /docs/AUTHORS.rst @saltstack-formulas/ssf 20 | /docs/CHANGELOG.rst @saltstack-formulas/ssf 21 | /docs/TOFS_pattern.rst @saltstack-formulas/ssf 22 | /*/_mapdata/ @saltstack-formulas/ssf 23 | /*/libsaltcli.jinja @saltstack-formulas/ssf 24 | /*/libtofs.jinja @saltstack-formulas/ssf 25 | /test/integration/**/_mapdata.rb @saltstack-formulas/ssf 26 | /test/integration/**/libraries/system.rb @saltstack-formulas/ssf 27 | /test/integration/**/inspec.yml @saltstack-formulas/ssf 28 | /test/integration/**/README.md @saltstack-formulas/ssf 29 | /test/salt/pillar/top.sls @saltstack-formulas/ssf 30 | /.gitignore @saltstack-formulas/ssf 31 | /.cirrus.yml @saltstack-formulas/ssf 32 | /.gitlab-ci.yml @saltstack-formulas/ssf 33 | /.pre-commit-config.yaml @saltstack-formulas/ssf 34 | /.rstcheck.cfg @saltstack-formulas/ssf 35 | /.rubocop.yml @saltstack-formulas/ssf 36 | /.salt-lint @saltstack-formulas/ssf 37 | /.travis.yml @saltstack-formulas/ssf 38 | /.yamllint @saltstack-formulas/ssf 39 | /AUTHORS.md @saltstack-formulas/ssf 40 | /CHANGELOG.md @saltstack-formulas/ssf 41 | /CODEOWNERS @saltstack-formulas/ssf 42 | /commitlint.config.js @saltstack-formulas/ssf 43 | /FORMULA @saltstack-formulas/ssf 44 | /Gemfile @saltstack-formulas/ssf 45 | /Gemfile.lock @saltstack-formulas/ssf 46 | /kitchen.yml @saltstack-formulas/ssf 47 | /kitchen.vagrant.yml @saltstack-formulas/ssf 48 | /kitchen.windows.yml @saltstack-formulas/ssf 49 | /pre-commit_semantic-release.sh @saltstack-formulas/ssf 50 | /release-rules.js @saltstack-formulas/ssf 51 | /release.config.js @saltstack-formulas/ssf 52 | 53 | # SECTION: Owner(s) for specific files 54 | # FILE PATTERN OWNER(S) 55 | -------------------------------------------------------------------------------- /pillar.example: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | redis: 5 | # If set, it executes: "echo never > /sys/kernel/mm/transparent_hugepage/enabled" 6 | # as it is recommended for redis deployments. 7 | # Keep in mind that it not a persistent change so you have to put that 8 | # command into a rc/systemd state or modify the grub setting the 9 | # "transparent_hugepage=never" option and reloading the grub config 10 | disable_transparent_huge_pages: true 11 | 12 | # include: # Will setup the following lines: 13 | # - /path/to/local.conf # include /path/to/local.conf 14 | # - /path/to/other.conf # include /path/to/other.conf 15 | root_dir: /var/lib/redis 16 | user: redis 17 | port: 6379 18 | bind: 127.0.0.1 19 | snapshots: 20 | - '900 1' 21 | - '300 10' 22 | - '60 10000' 23 | # extra_opts: 24 | # supervised: systemd 25 | 26 | lookup: 27 | # These can be overridden but commenting here since used by Kitchen during 28 | # the Travis run (breaks numerous platforms) 29 | # cfg_name: /etc/redis.conf 30 | # pkg_name: redis-server 31 | # svc_name: redis-server 32 | svc_state: running 33 | overcommit_memory: true 34 | 35 | # To use the new more structured template, add this to the pillar 36 | # source_path: salt://redis/files/redis-3.2-ng.conf.jinja 37 | 38 | # 39 | # Redis Sentinel Pillar 40 | # 41 | sentinel: 42 | 43 | # The service can be enabled or disabled if needed 44 | enabled: true 45 | 46 | # To setup the configuration, you can either specify the salt:// source path 47 | source_path: salt://hostname/redis-sentinel.conf 48 | 49 | # or the options (most of them are setup by default) 50 | 51 | # keep in mind: https://github.com/antirez/redis/issues/3416 52 | # with: bind: '0.0.0.0' works 53 | bind: '127.0.0.1 192.168.1.1' 54 | 55 | protected-mode: 'no' 56 | port: 26379 57 | announce-ip: 1.1.1.1 58 | announce-port: 26379 59 | dir: '/var/lib/redis' 60 | 61 | # Options not explicitely defined in the template can be added with the 62 | # following option 63 | extra_opts: 64 | maxclients: 1000 65 | 66 | # List of masters to monitor 67 | masters: 68 | 69 | # More complex configuration 70 | mymaster: 71 | ip: 127.0.0.1 72 | port: 6379 73 | quorum: 2 74 | down-after-milliseconds: 6000 75 | failover-timeout: 180000 76 | parallel-syncs: 1 77 | auth-pass: supersecret 78 | notification-script: 79 | path: /var/redis/notify.sh 80 | source_path: salt://hostname/notify.sh 81 | client-reconfig-script: 82 | path: /var/redis/localscript.sh 83 | # Extra options for masters can be defined with the following option: 84 | extra_opts: 85 | opt1: value1 # will create the line: sentinel mymaster2 opt1 value1 86 | 87 | # Simple example 88 | mymaster2: 89 | ip: 2.2.2.2 90 | port: 6379 91 | quorum: 3 92 | 93 | # Even more simple example 94 | # default port is 6379 and default quorum is 2 95 | mymaster3: 96 | ip: 3.3.3.3 97 | 98 | # Multiple-instances management. 99 | # Note: Tested on debian stretch only. 100 | instances: 101 | # Special value, if you want to override something for all your instances 102 | _default: 103 | bind: 0.0.0.0 104 | # Now, we define each instance, with its differences 105 | cache: 106 | port: 6380 107 | sessions: 108 | port: 6381 109 | -------------------------------------------------------------------------------- /redis/common.sls: -------------------------------------------------------------------------------- 1 | {% from "redis/map.jinja" import redis_settings with context %} 2 | 3 | 4 | {% set install_from = redis_settings.install_from -%} 5 | 6 | {% if install_from in ('source', 'archive') %} 7 | {% set version = redis_settings.version|default('2.8.8') -%} 8 | {% set checksum = redis_settings.checksum|default('sha1=aa811f399db58c92c8ec5e48271d307e9ab8eb81') -%} 9 | {% set root = redis_settings.root|default('/usr/local') -%} 10 | 11 | {# there is a missing config template for version 2.8.8 #} 12 | 13 | redis-dependencies: 14 | pkg.installed: 15 | - names: 16 | - {{ redis_settings.python_dev_package }} 17 | {% if grains['os_family'] == 'RedHat' %} 18 | - make 19 | - libxml2-devel 20 | {% elif grains['os_family'] == 'Debian' or grains['os_family'] == 'Ubuntu' %} 21 | - build-essential 22 | - libxml2-dev 23 | {% endif %} 24 | 25 | get-redis: 26 | file.managed: 27 | - name: {{ root }}/redis-{{ version }}.tar.gz 28 | - source: http://download.redis.io/releases/redis-{{ version }}.tar.gz 29 | - source_hash: {{ checksum }} 30 | - makedirs: True 31 | - require: 32 | - pkg: redis-dependencies 33 | cmd.run: 34 | - cwd: {{ root }} 35 | - names: 36 | - tar -zxvf {{ root }}/redis-{{ version }}.tar.gz -C {{ root }} >/dev/null 37 | - onchanges: 38 | - file: get-redis 39 | 40 | make-and-install-redis: 41 | cmd.run: 42 | - cwd: {{ root }}/redis-{{ version }} 43 | - names: 44 | - make >/dev/null 2>&1 45 | - make install >/dev/null 2>&1 46 | - onchanges: 47 | - cmd: get-redis 48 | 49 | install-redis-service: 50 | cmd.run: 51 | - cwd: {{ root }}/redis-{{ version }} 52 | - names: 53 | - echo -n | utils/install_server.sh 54 | - onchanges: 55 | - cmd: get-redis 56 | - cmd: make-and-install-redis 57 | - require: 58 | - cmd: make-and-install-redis 59 | 60 | 61 | {% elif install_from == 'package' %} 62 | 63 | {%- if salt['grains.get']('osfinger', '') in ['Amazon Linux-2'] %} 64 | redis_epel_repo: 65 | pkgrepo.managed: 66 | - name: epel 67 | - humanname: Extra Packages for Enterprise Linux 7 - $basearch 68 | - mirrorlist: https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch 69 | - enabled: 1 70 | - gpgcheck: 1 71 | - gpgkey: https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7 72 | - failovermethod: priority 73 | - require_in: 74 | - pkg: install-redis 75 | {%- endif %} 76 | 77 | install-redis: 78 | pkg.installed: 79 | - name: {{ redis_settings.pkg_name }} 80 | {% if redis_settings.version is defined %} 81 | - version: {{ redis_settings.version }} 82 | - ignore_epoch: True 83 | {% endif %} 84 | {% endif %} 85 | 86 | {%- if grains.os_family|lower == 'suse' %} 87 | {# this is basically a workaround for faulty packaging #} 88 | install-redis-user-group: 89 | group.present: 90 | - name: {{ redis_settings.group }} 91 | user.present: 92 | - name: {{ redis_settings.user }} 93 | - usergroup: True 94 | - home: {{ redis_settings.home }} 95 | - require: 96 | - group: install-redis-user-group 97 | - require_in: 98 | - file: install-redis-log-dir 99 | 100 | install-redis-log-dir: 101 | file.directory: 102 | - name: {{ redis_settings.dir.log }} 103 | - mode: 755 104 | - user: {{ redis_settings.user }} 105 | - group: {{ redis_settings.group }} 106 | - recurse: 107 | - user 108 | - group 109 | - mode 110 | - makedirs: True 111 | 112 | install-redis-service: 113 | file.replace: 114 | - name: {{ redis_settings.dir.service }}/redis@.service 115 | - pattern: ^Type=notify 116 | - repl: Type=simple 117 | - onlyif: test -f {{ redis_settings.dir.service }}/redis@.service 118 | cmd.run: 119 | - name: systemctl daemon-reload 120 | - onchanges: 121 | - file: install-redis-log-dir 122 | {%- endif %} 123 | -------------------------------------------------------------------------------- /redis/files/redis-2.4.conf.jinja: -------------------------------------------------------------------------------- 1 | # Redis configuration file 2 | {% from "redis/map.jinja" import redis_settings with context %} 3 | daemonize yes 4 | 5 | pidfile {{ redis_settings.pidfile }} 6 | port {{ redis_settings.port }} 7 | 8 | bind {{ redis_settings.bind }} 9 | 10 | {% if redis_settings.unixsocket is defined %} 11 | unixsocket {{ redis_settings.unixsocket }} 12 | unixsocketperm {{ redis_settings.unixsocketperm }} 13 | {% endif -%} 14 | 15 | timeout 0 16 | 17 | loglevel {{ redis_settings.loglevel }} 18 | 19 | {% if redis_settings.syslog is defined %} 20 | syslog-enabled yes 21 | syslog-ident {{ redis_settings.syslog.ident }} 22 | syslog-facility {{ redis_settings.syslog.facility }} 23 | {% if redis_settings.syslog.nologfile is defined %} 24 | logfile "" 25 | {% else %} 26 | logfile {{ redis_settings.logfile }} 27 | {% endif -%} 28 | {% else %} 29 | logfile {{ redis_settings.logfile }} 30 | {% endif -%} 31 | 32 | databases {{ redis_settings.database_count }} 33 | 34 | {% for s in redis_settings.snapshots -%} 35 | save {{ s }} 36 | {% endfor %} 37 | 38 | rdbcompression {{ redis_settings.rdbcompression }} 39 | 40 | dbfilename {{ redis_settings.dbfilename }} 41 | dir {{ redis_settings.root_dir }} 42 | 43 | {% if redis_settings.slaveof is defined %} 44 | slaveof {{ redis_settings.slaveof.masterip }} {{ redis_settings.slaveof.masterport }} 45 | {% endif -%} 46 | 47 | {% if redis_settings.masterauth is defined %} 48 | masterauth {{ redis_settings.masterauth }} 49 | {% endif -%} 50 | 51 | slave-serve-stale-data {{ redis_settings.slave_serve_stale_data }} 52 | 53 | {% if redis_settings.repl_ping_slave_period is defined %} 54 | repl-ping-slave-period {{ redis_settings.repl_ping_slave_period }} 55 | {% endif -%} 56 | 57 | {% if redis_settings.repl_timeout is defined %} 58 | repl-timeout {{ redis_settings.repl_timeout }} 59 | {% endif -%} 60 | 61 | {% if redis_settings.pass is defined %} 62 | requirepass {{ redis_settings.pass }} 63 | {% endif -%} 64 | 65 | {% if redis_settings.rename_command is defined %} 66 | {% for k, v in redis_settings.rename_command.items() %} 67 | rename-command {{ k }} {{ v }} 68 | {% endfor %} 69 | {% endif -%} 70 | 71 | {% if redis_settings.maxclients is defined %} 72 | maxclients {{ redis_settings.maxclients }} 73 | {% endif -%} 74 | 75 | {% if redis_settings.maxmemory is defined -%} 76 | maxmemory {{ redis_settings.maxmemory }} 77 | maxmemory-policy {{ redis_settings.maxmemory_policy }} 78 | maxmemory-samples {{ redis_settings.maxmemory_samples }} 79 | {% endif %} 80 | 81 | appendonly {{ redis_settings.appendonly }} 82 | appendfilename {{ redis_settings.appendfilename }} 83 | appendfsync {{ redis_settings.appendfsync }} 84 | 85 | no-appendfsync-on-rewrite {{ redis_settings.no_appendfsync_on_rewrite }} 86 | auto-aof-rewrite-percentage {{ redis_settings.auto_aof_rewrite_percentage }} 87 | 88 | auto-aof-rewrite-min-size {{ redis_settings.auto_aof_rewrite_min_size }} 89 | 90 | slowlog-log-slower-than {{ redis_settings.slowlog_log_slower_than }} 91 | slowlog-max-len {{ redis_settings.slowlog_max_len }} 92 | 93 | {%- if redis_settings.extra_opts is defined %} 94 | {%- for option,value in redis_settings.extra_opts.items() %} 95 | {{ option }} {{ value }} 96 | {%- endfor %} 97 | {%- endif %} 98 | 99 | ################################ VIRTUAL MEMORY ############################### 100 | 101 | ### WARNING! Virtual Memory is deprecated in Redis 2.4 102 | ### The use of Virtual Memory is strongly discouraged. 103 | vm-enabled no 104 | vm-swap-file /tmp/redis.swap 105 | 106 | vm-max-memory 0 107 | 108 | vm-page-size 32 109 | vm-pages 134217728 110 | 111 | vm-max-threads 4 112 | 113 | ############################### ADVANCED CONFIG ############################### 114 | 115 | hash-max-zipmap-entries 512 116 | hash-max-zipmap-value 64 117 | 118 | list-max-ziplist-entries 512 119 | list-max-ziplist-value 64 120 | 121 | set-max-intset-entries 512 122 | 123 | zset-max-ziplist-entries 128 124 | zset-max-ziplist-value 64 125 | 126 | activerehashing yes 127 | -------------------------------------------------------------------------------- /release.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | branch: 'master', 3 | repositoryUrl: 'https://github.com/saltstack-formulas/redis-formula', 4 | plugins: [ 5 | ['@semantic-release/commit-analyzer', { 6 | preset: 'angular', 7 | releaseRules: './release-rules.js', 8 | }], 9 | '@semantic-release/release-notes-generator', 10 | ['@semantic-release/changelog', { 11 | changelogFile: 'CHANGELOG.md', 12 | changelogTitle: '# Changelog', 13 | }], 14 | ['@semantic-release/exec', { 15 | prepareCmd: 'sh ./pre-commit_semantic-release.sh ${nextRelease.version}', 16 | }], 17 | ['@semantic-release/git', { 18 | assets: ['*.md', 'docs/*.rst', 'FORMULA'], 19 | }], 20 | '@semantic-release/github', 21 | ], 22 | generateNotes: { 23 | preset: 'angular', 24 | writerOpts: { 25 | // Required due to upstream bug preventing all types being displayed. 26 | // Bug: https://github.com/conventional-changelog/conventional-changelog/issues/317 27 | // Fix: https://github.com/conventional-changelog/conventional-changelog/pull/410 28 | transform: (commit, context) => { 29 | const issues = [] 30 | 31 | commit.notes.forEach(note => { 32 | note.title = `BREAKING CHANGES` 33 | }) 34 | 35 | // NOTE: Any changes here must be reflected in `CONTRIBUTING.md`. 36 | if (commit.type === `feat`) { 37 | commit.type = `Features` 38 | } else if (commit.type === `fix`) { 39 | commit.type = `Bug Fixes` 40 | } else if (commit.type === `perf`) { 41 | commit.type = `Performance Improvements` 42 | } else if (commit.type === `revert`) { 43 | commit.type = `Reverts` 44 | } else if (commit.type === `docs`) { 45 | commit.type = `Documentation` 46 | } else if (commit.type === `style`) { 47 | commit.type = `Styles` 48 | } else if (commit.type === `refactor`) { 49 | commit.type = `Code Refactoring` 50 | } else if (commit.type === `test`) { 51 | commit.type = `Tests` 52 | } else if (commit.type === `build`) { 53 | commit.type = `Build System` 54 | // } else if (commit.type === `chore`) { 55 | // commit.type = `Maintenance` 56 | } else if (commit.type === `ci`) { 57 | commit.type = `Continuous Integration` 58 | } else { 59 | return 60 | } 61 | 62 | if (commit.scope === `*`) { 63 | commit.scope = `` 64 | } 65 | 66 | if (typeof commit.hash === `string`) { 67 | commit.shortHash = commit.hash.substring(0, 7) 68 | } 69 | 70 | if (typeof commit.subject === `string`) { 71 | let url = context.repository 72 | ? `${context.host}/${context.owner}/${context.repository}` 73 | : context.repoUrl 74 | if (url) { 75 | url = `${url}/issues/` 76 | // Issue URLs. 77 | commit.subject = commit.subject.replace(/#([0-9]+)/g, (_, issue) => { 78 | issues.push(issue) 79 | return `[#${issue}](${url}${issue})` 80 | }) 81 | } 82 | if (context.host) { 83 | // User URLs. 84 | commit.subject = commit.subject.replace(/\B@([a-z0-9](?:-?[a-z0-9/]){0,38})/g, (_, username) => { 85 | if (username.includes('/')) { 86 | return `@${username}` 87 | } 88 | 89 | return `[@${username}](${context.host}/${username})` 90 | }) 91 | } 92 | } 93 | 94 | // remove references that already appear in the subject 95 | commit.references = commit.references.filter(reference => { 96 | if (issues.indexOf(reference.issue) === -1) { 97 | return true 98 | } 99 | 100 | return false 101 | }) 102 | 103 | return commit 104 | }, 105 | }, 106 | }, 107 | }; 108 | -------------------------------------------------------------------------------- /test/integration/share/libraries/system.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # system.rb -- InSpec resources for system values 4 | # Author: Daniel Dehennin 5 | # Copyright (C) 2020 Daniel Dehennin 6 | 7 | # rubocop:disable Metrics/ClassLength 8 | class SystemResource < Inspec.resource(1) 9 | name 'system' 10 | 11 | attr_reader :platform 12 | 13 | def initialize 14 | super 15 | @platform = build_platform 16 | end 17 | 18 | private 19 | 20 | def build_platform 21 | { 22 | family: build_platform_family, 23 | name: build_platform_name, 24 | release: build_platform_release, 25 | finger: build_platform_finger, 26 | codename: build_platform_codename 27 | } 28 | end 29 | 30 | def build_platform_family 31 | case inspec.platform[:name] 32 | when 'arch', 'gentoo' 33 | inspec.platform[:name] 34 | else 35 | inspec.platform[:family] 36 | end 37 | end 38 | 39 | def build_platform_name 40 | case inspec.platform[:name] 41 | when 'amazon', 'oracle', 'rocky' 42 | "#{inspec.platform[:name]}linux" 43 | when /^windows_/ 44 | inspec.platform[:family] 45 | else 46 | inspec.platform[:name] 47 | end 48 | end 49 | 50 | # rubocop:disable Metrics/MethodLength,Metrics/AbcSize,Metrics/CyclomaticComplexity 51 | def build_platform_release 52 | case inspec.platform[:name] 53 | when 'amazon' 54 | # `2018` relase is named `1` in `kitchen.yml` 55 | inspec.platform[:release].gsub(/2018.*/, '1') 56 | when 'arch' 57 | 'base-latest' 58 | when 'gentoo' 59 | "#{inspec.platform[:release].split('.')[0]}-#{derive_gentoo_init_system}" 60 | when 'mac_os_x' 61 | inspec.command('sw_vers -productVersion').stdout.to_s 62 | when 'opensuse' 63 | # rubocop:disable Style/NumericLiterals,Layout/LineLength 64 | inspec.platform[:release].to_i > 20210101 ? 'tumbleweed' : inspec.platform[:release] 65 | # rubocop:enable Style/NumericLiterals,Layout/LineLength 66 | when 'windows_8.1_pro' 67 | '8.1' 68 | when 'windows_server_2022_datacenter' 69 | '2022-server' 70 | when 'windows_server_2019_datacenter' 71 | '2019-server' 72 | when 'windows_server_2016_datacenter' 73 | '2016-server' 74 | else 75 | inspec.platform[:release] 76 | end 77 | end 78 | # rubocop:enable Metrics/MethodLength,Metrics/AbcSize,Metrics/CyclomaticComplexity 79 | 80 | def derive_gentoo_init_system 81 | inspec.command('systemctl').exist? ? 'sysd' : 'sysv' 82 | end 83 | 84 | def build_platform_finger 85 | "#{build_platform_name}-#{build_finger_release}" 86 | end 87 | 88 | def build_finger_release 89 | case inspec.platform[:name] 90 | when 'ubuntu' 91 | build_platform_release.split('.').slice(0, 2).join('.') 92 | else 93 | build_platform_release.split('.')[0] 94 | end 95 | end 96 | 97 | # rubocop:disable Metrics/MethodLength,Metrics/CyclomaticComplexity 98 | def build_platform_codename 99 | case build_platform_finger 100 | when 'ubuntu-22.04' 101 | 'jammy' 102 | when 'ubuntu-20.04' 103 | 'focal' 104 | when 'ubuntu-18.04' 105 | 'bionic' 106 | when 'debian-11' 107 | 'bullseye' 108 | when 'debian-10' 109 | 'buster' 110 | when 'debian-9' 111 | 'stretch' 112 | when 'almalinux-8' 113 | "AlmaLinux #{build_platform_release} (Arctic Sphynx)" 114 | when 'amazonlinux-2' 115 | 'Amazon Linux 2' 116 | when 'arch-base-latest' 117 | 'Arch Linux' 118 | when 'centos-7' 119 | 'CentOS Linux 7 (Core)' 120 | when 'centos-8' 121 | 'CentOS Stream 8' 122 | when 'opensuse-tumbleweed' 123 | 'openSUSE Tumbleweed' 124 | when 'opensuse-15' 125 | "openSUSE Leap #{build_platform_release}" 126 | when 'oraclelinux-8', 'oraclelinux-7' 127 | "Oracle Linux Server #{build_platform_release}" 128 | when 'gentoo-2-sysd', 'gentoo-2-sysv' 129 | 'Gentoo/Linux' 130 | when 'rockylinux-8' 131 | "Rocky Linux #{build_platform_release} (Green Obsidian)" 132 | else 133 | '' 134 | end 135 | end 136 | # rubocop:enable Metrics/MethodLength,Metrics/CyclomaticComplexity 137 | end 138 | # rubocop:enable Metrics/ClassLength 139 | -------------------------------------------------------------------------------- /redis/files/redis-2.6.conf.jinja: -------------------------------------------------------------------------------- 1 | # Redis config 2 | {% from "redis/map.jinja" import redis_settings with context %} 3 | daemonize yes 4 | 5 | pidfile {{ redis_settings.pidfile }} 6 | port {{ redis_settings.port }} 7 | 8 | {% if redis_settings.bind is defined %} 9 | bind {{ redis_settings.bind }} 10 | {% endif -%} 11 | 12 | {% if redis_settings.unixsocket is defined %} 13 | unixsocket {{ redis_settings.unixsocket }} 14 | unixsocketperm {{ redis_settings.unixsocketperm }} 15 | {% endif -%} 16 | 17 | tcp-keepalive {{ redis_settings.tcp_keepalive }} 18 | 19 | loglevel {{ redis_settings.loglevel }} 20 | {% if redis_settings.syslog is defined %} 21 | syslog-enabled yes 22 | syslog-ident {{ redis_settings.syslog.ident }} 23 | syslog-facility {{ redis_settings.syslog.facility }} 24 | {% if redis_settings.syslog.nologfile is defined %} 25 | logfile "" 26 | {% else %} 27 | logfile {{ redis_settings.logfile }} 28 | {% endif -%} 29 | {% else %} 30 | logfile {{ redis_settings.logfile }} 31 | {% endif -%} 32 | 33 | 34 | databases {{ redis_settings.database_count }} 35 | 36 | {% for s in redis_settings.snapshots -%} 37 | save {{ s }} 38 | {% endfor %} 39 | 40 | stop-writes-on-bgsave-error {{ redis_settings.stop_writes_on_bgsave_error }} 41 | 42 | rdbcompression {{ redis_settings.rdbcompression }} 43 | rdbchecksum {{ redis_settings.rdbchecksum }} 44 | 45 | dbfilename {{ redis_settings.dbfilename }} 46 | dir {{ redis_settings.root_dir }} 47 | 48 | {% if redis_settings.slaveof is defined %} 49 | slaveof {{ redis_settings.slaveof.masterip }} {{ redis_settings.slaveof.masterport }} 50 | {% endif -%} 51 | 52 | {% if redis_settings.masterauth is defined %} 53 | masterauth {{ redis_settings.masterauth }} 54 | {% endif -%} 55 | 56 | slave-serve-stale-data {{ redis_settings.slave_serve_stale_data }} 57 | slave-read-only {{ redis_settings.slave_read_only }} 58 | 59 | {% if redis_settings.repl_ping_slave_period is defined %} 60 | repl-ping-slave-period {{ redis_settings.repl_ping_slave_period }} 61 | {% endif -%} 62 | 63 | {% if redis_settings.repl_timeout is defined %} 64 | repl-timeout {{ redis_settings.repl_timeout }} 65 | {% endif -%} 66 | 67 | repl-disable-tcp-nodelay {{ redis_settings.repl_disable_tcp_nodelay }} 68 | 69 | {% if redis_settings.repl_backlog_size is defined %} 70 | repl-backlog-size {{ redis_settings.repl_backlog_size }} 71 | {% endif -%} 72 | 73 | {% if redis_settings.repl_backlog_ttl is defined %} 74 | repl-backlog-ttl {{ redis_settings.repl_backlog_ttl }} 75 | {% endif -%} 76 | 77 | slave-priority {{ redis_settings.slave_priority }} 78 | 79 | {% if redis_settings.min_slaves_to_write is defined %} 80 | min-slaves-to-write {{ redis_settings.min_slaves_to_write }} 81 | {% endif -%} 82 | 83 | {% if redis_settings.min_slaves_max_lag is defined %} 84 | min-slaves-max-lag {{ redis_settings.min_slaves_max_lag }} 85 | {% endif -%} 86 | 87 | {% if redis_settings.pass is defined %} 88 | requirepass {{ redis_settings.pass }} 89 | {% endif -%} 90 | 91 | {% if redis_settings.rename_command is defined %} 92 | {% for k, v in redis_settings.rename_command.items() %} 93 | rename-command {{ k }} {{ v }} 94 | {% endfor %} 95 | {% endif -%} 96 | 97 | {% if redis_settings.maxclients is defined %} 98 | maxclients {{ redis_settings.maxclients }} 99 | {% endif -%} 100 | 101 | {% if redis_settings.maxmemory is defined %} 102 | maxmemory {{ redis_settings.maxmemory }} 103 | maxmemory-policy {{ redis_settings.maxmemory_policy }} 104 | maxmemory-samples {{ redis_settings.maxmemory_samples }} 105 | {% endif %} 106 | 107 | appendonly {{ redis_settings.appendonly }} 108 | appendfilename {{ redis_settings.appendfilename }} 109 | appendfsync {{ redis_settings.appendfsync }} 110 | 111 | no-appendfsync-on-rewrite {{ redis_settings.no_appendfsync_on_rewrite }} 112 | auto-aof-rewrite-percentage {{ redis_settings.auto_aof_rewrite_percentage }} 113 | 114 | auto-aof-rewrite-min-size {{ redis_settings.auto_aof_rewrite_min_size }} 115 | 116 | lua-time-limit {{ redis_settings.lua_time_limit }} 117 | 118 | slowlog-log-slower-than {{ redis_settings.slowlog_log_slower_than }} 119 | slowlog-max-len {{ redis_settings.slowlog_max_len }} 120 | 121 | notify-keyspace-events {{ redis_settings.notify_keyspace_events }} 122 | 123 | {%- if redis_settings.extra_opts is defined %} 124 | {%- for option,value in redis_settings.extra_opts.items() %} 125 | {{ option }} {{ value }} 126 | {%- endfor %} 127 | {%- endif %} 128 | 129 | ############################### ADVANCED CONFIG ############################### 130 | 131 | hash-max-ziplist-entries 512 132 | hash-max-ziplist-value 64 133 | 134 | list-max-ziplist-entries 512 135 | list-max-ziplist-value 64 136 | 137 | set-max-intset-entries 512 138 | 139 | zset-max-ziplist-entries 128 140 | zset-max-ziplist-value 64 141 | 142 | activerehashing yes 143 | 144 | client-output-buffer-limit normal 0 0 0 145 | client-output-buffer-limit slave 256mb 64mb 60 146 | client-output-buffer-limit pubsub 32mb 8mb 60 147 | 148 | hz 10 149 | 150 | aof-rewrite-incremental-fsync yes 151 | -------------------------------------------------------------------------------- /redis/files/redis-2.8.conf.jinja: -------------------------------------------------------------------------------- 1 | # Redis config 2 | {% from "redis/map.jinja" import redis_settings with context %} 3 | daemonize yes 4 | 5 | pidfile {{ redis_settings.pidfile }} 6 | port {{ redis_settings.port }} 7 | 8 | {% if redis_settings.bind is defined %} 9 | bind {{ redis_settings.bind }} 10 | {% endif -%} 11 | 12 | {% if redis_settings.unixsocket is defined %} 13 | unixsocket {{ redis_settings.unixsocket }} 14 | unixsocketperm {{ redis_settings.unixsocketperm }} 15 | {% endif -%} 16 | 17 | {% if redis_settings.tcp_backlog is defined and redis_settings.tcp_backlog > 0 %} 18 | tcp-backlog {{ redis_settings.tcp_backlog }} 19 | {% endif -%} 20 | tcp-keepalive {{ redis_settings.tcp_keepalive }} 21 | 22 | loglevel {{ redis_settings.loglevel }} 23 | 24 | {% if redis_settings.syslog is defined %} 25 | syslog-enabled yes 26 | syslog-ident {{ redis_settings.syslog.ident }} 27 | syslog-facility {{ redis_settings.syslog.facility }} 28 | {% if redis_settings.syslog.nologfile is defined %} 29 | logfile "" 30 | {% else %} 31 | logfile {{ redis_settings.logfile }} 32 | {% endif -%} 33 | {% else %} 34 | logfile {{ redis_settings.logfile }} 35 | {% endif -%} 36 | 37 | databases {{ redis_settings.database_count }} 38 | 39 | {% for s in redis_settings.snapshots -%} 40 | save {{ s }} 41 | {% endfor %} 42 | 43 | stop-writes-on-bgsave-error {{ redis_settings.stop_writes_on_bgsave_error }} 44 | 45 | rdbcompression {{ redis_settings.rdbcompression }} 46 | rdbchecksum {{ redis_settings.rdbchecksum }} 47 | 48 | dbfilename {{ redis_settings.dbfilename }} 49 | dir {{ redis_settings.root_dir }} 50 | 51 | {% if redis_settings.slaveof is defined %} 52 | slaveof {{ redis_settings.slaveof.masterip }} {{ redis_settings.slaveof.masterport }} 53 | {% endif -%} 54 | 55 | {% if redis_settings.masterauth is defined %} 56 | masterauth {{ redis_settings.masterauth }} 57 | {% endif -%} 58 | 59 | slave-serve-stale-data {{ redis_settings.slave_serve_stale_data }} 60 | slave-read-only {{ redis_settings.slave_read_only }} 61 | 62 | {% if redis_settings.repl_ping_slave_period is defined %} 63 | repl-ping-slave-period {{ redis_settings.repl_ping_slave_period }} 64 | {% endif -%} 65 | 66 | {% if redis_settings.repl_timeout is defined %} 67 | repl-timeout {{ redis_settings.repl_timeout }} 68 | {% endif -%} 69 | 70 | repl-disable-tcp-nodelay {{ redis_settings.repl_disable_tcp_nodelay }} 71 | 72 | {% if redis_settings.repl_backlog_size is defined %} 73 | repl-backlog-size {{ redis_settings.repl_backlog_size }} 74 | {% endif -%} 75 | 76 | {% if redis_settings.repl_backlog_ttl is defined %} 77 | repl-backlog-ttl {{ redis_settings.repl_backlog_ttl }} 78 | {% endif -%} 79 | 80 | slave-priority {{ redis_settings.slave_priority }} 81 | 82 | {% if redis_settings.min_slaves_to_write is defined %} 83 | min-slaves-to-write {{ redis_settings.min_slaves_to_write }} 84 | {% endif -%} 85 | 86 | {% if redis_settings.min_slaves_max_lag is defined %} 87 | min-slaves-max-lag {{ redis_settings.min_slaves_max_lag }} 88 | {% endif -%} 89 | 90 | {% if redis_settings.pass is defined %} 91 | requirepass {{ redis_settings.pass }} 92 | {% endif -%} 93 | 94 | {% if redis_settings.rename_command is defined %} 95 | {% for k, v in redis_settings.rename_command.items() %} 96 | rename-command {{ k }} {{ v }} 97 | {% endfor %} 98 | {% endif -%} 99 | 100 | {% if redis_settings.maxclients is defined %} 101 | maxclients {{ redis_settings.maxclients }} 102 | {% endif -%} 103 | 104 | {% if redis_settings.maxmemory is defined %} 105 | maxmemory {{ redis_settings.maxmemory }} 106 | maxmemory-policy {{ redis_settings.maxmemory_policy }} 107 | maxmemory-samples {{ redis_settings.maxmemory_samples }} 108 | {% endif %} 109 | 110 | appendonly {{ redis_settings.appendonly }} 111 | appendfilename {{ redis_settings.appendfilename }} 112 | appendfsync {{ redis_settings.appendfsync }} 113 | 114 | no-appendfsync-on-rewrite {{ redis_settings.no_appendfsync_on_rewrite }} 115 | auto-aof-rewrite-percentage {{ redis_settings.auto_aof_rewrite_percentage }} 116 | 117 | auto-aof-rewrite-min-size {{ redis_settings.auto_aof_rewrite_min_size }} 118 | 119 | lua-time-limit {{ redis_settings.lua_time_limit }} 120 | 121 | slowlog-log-slower-than {{ redis_settings.slowlog_log_slower_than }} 122 | slowlog-max-len {{ redis_settings.slowlog_max_len }} 123 | 124 | notify-keyspace-events {{ redis_settings.notify_keyspace_events }} 125 | 126 | {%- if redis_settings.extra_opts is defined %} 127 | {%- for option,value in redis_settings.extra_opts.items() %} 128 | {{ option }} {{ value }} 129 | {%- endfor %} 130 | {%- endif %} 131 | 132 | ############################### ADVANCED CONFIG ############################### 133 | 134 | hash-max-ziplist-entries 512 135 | hash-max-ziplist-value 64 136 | 137 | list-max-ziplist-entries 512 138 | list-max-ziplist-value 64 139 | 140 | set-max-intset-entries 512 141 | 142 | zset-max-ziplist-entries 128 143 | zset-max-ziplist-value 64 144 | 145 | activerehashing yes 146 | 147 | client-output-buffer-limit normal 0 0 0 148 | client-output-buffer-limit slave 256mb 64mb 60 149 | client-output-buffer-limit pubsub 32mb 8mb 60 150 | 151 | hz 10 152 | 153 | aof-rewrite-incremental-fsync yes 154 | -------------------------------------------------------------------------------- /docs/README.rst: -------------------------------------------------------------------------------- 1 | .. _readme: 2 | 3 | redis-formula 4 | ============= 5 | 6 | |img_travis| |img_sr| |img_pc| 7 | 8 | .. |img_travis| image:: https://travis-ci.com/saltstack-formulas/redis-formula.svg?branch=master 9 | :alt: Travis CI Build Status 10 | :scale: 100% 11 | :target: https://travis-ci.com/saltstack-formulas/redis-formula 12 | .. |img_sr| image:: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg 13 | :alt: Semantic Release 14 | :scale: 100% 15 | :target: https://github.com/semantic-release/semantic-release 16 | .. |img_pc| image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white 17 | :alt: pre-commit 18 | :scale: 100% 19 | :target: https://github.com/pre-commit/pre-commit 20 | 21 | Formula to install and configure redis. 22 | 23 | .. contents:: **Table of Contents** 24 | :depth: 1 25 | 26 | General notes 27 | ------------- 28 | 29 | See the full `SaltStack Formulas installation and usage instructions 30 | `_. 31 | 32 | If you are interested in writing or contributing to formulas, please pay attention to the `Writing Formula Section 33 | `_. 34 | 35 | If you want to use this formula, please pay attention to the ``FORMULA`` file and/or ``git tag``, 36 | which contains the currently released version. This formula is versioned according to `Semantic Versioning `_. 37 | 38 | See `Formula Versioning Section `_ for more details. 39 | 40 | Contributing to this repo 41 | ------------------------- 42 | 43 | **Commit message formatting is significant!!** 44 | 45 | Please see `How to contribute `_ for more details. 46 | 47 | pre-commit 48 | ^^^^^^^^^^ 49 | 50 | `pre-commit `_ is configured for this formula, which you may optionally use to ease the steps involved in submitting your changes. 51 | First install the ``pre-commit`` package manager using the appropriate `method `_, then run ``bin/install-hooks`` and 52 | now ``pre-commit`` will run automatically on each ``git commit``. :: 53 | 54 | $ bin/install-hooks 55 | pre-commit installed at .git/hooks/pre-commit 56 | pre-commit installed at .git/hooks/commit-msg 57 | 58 | Special notes 59 | ------------- 60 | 61 | None. 62 | 63 | Todo 64 | ---- 65 | 66 | * merge redis 2.4 and 2.6 templates to generic redis.conf.jinja 67 | 68 | Available states 69 | ---------------- 70 | 71 | .. contents:: 72 | :local: 73 | 74 | ``redis`` 75 | ^^^^^^^^^ 76 | 77 | *Meta-state (This is a state that includes other states)*. 78 | 79 | This state installs the Redis server solution (see https://redis.io) 80 | 81 | ``redis.clean`` 82 | ^^^^^^^^^^^^^^^^ 83 | 84 | *Meta-state (This is a state that includes other states)*. 85 | 86 | Stop Redis daemon and remove redis server solution. 87 | 88 | ``redis.common`` 89 | ^^^^^^^^^^^^^^^^ 90 | 91 | Install redis only 92 | 93 | ``redis.server`` 94 | ^^^^^^^^^^^^^^^^ 95 | 96 | Install redis and start up the service ( Ubuntu + RedHat based systems should work ). 97 | 98 | For a list of all available options, look at: `redis/files/redis-{version}.conf.jinja` - also have a look at the pillar.example and map.jinja. 99 | 100 | To use the new redis 3.2 template (more structured) add the following line to the pillar: 101 | 102 | ``source_path: salt://redis/files/redis-3.2-ng.conf.jinja`` 103 | 104 | For options that aren't in the template (timeout, for example in redis-2.8 template), you can use ``extra_opts``: 105 | 106 | .. code-block:: yaml 107 | 108 | extra_opts: 109 | timeout: 10 110 | 111 | ``redis.server.clean`` 112 | ^^^^^^^^^^^^^^^^^^^^^^ 113 | 114 | *Meta-state (This is a state that includes other states)*. 115 | 116 | Stop Redis daemon and remove redis package/archive. 117 | 118 | ``redis.sentinel`` 119 | ^^^^^^^^^^^^^^^^^^ 120 | 121 | Install redis sentinel. Compatible with Ubuntu 14/16 and CentOS 6/7. 122 | 123 | Testing 124 | ------- 125 | 126 | Linux testing is done with ``kitchen-salt``. 127 | 128 | Requirements 129 | ^^^^^^^^^^^^ 130 | 131 | * Ruby 132 | * Docker 133 | 134 | .. code-block:: bash 135 | 136 | $ gem install bundler 137 | $ bundle install 138 | $ bin/kitchen test [platform] 139 | 140 | Where ``[platform]`` is the platform name defined in ``kitchen.yml``, 141 | e.g. ``debian-9-2019-2-py3``. 142 | 143 | ``bin/kitchen converge`` 144 | ^^^^^^^^^^^^^^^^^^^^^^^^ 145 | 146 | Creates the docker instance and runs the ``redis`` main states, ready for testing. 147 | 148 | ``bin/kitchen verify`` 149 | ^^^^^^^^^^^^^^^^^^^^^^ 150 | 151 | Runs the ``inspec`` tests on the actual instance. 152 | 153 | ``bin/kitchen destroy`` 154 | ^^^^^^^^^^^^^^^^^^^^^^^ 155 | 156 | Removes the docker instance. 157 | 158 | ``bin/kitchen test`` 159 | ^^^^^^^^^^^^^^^^^^^^ 160 | 161 | Runs all of the stages above in one go: i.e. ``destroy`` + ``converge`` + ``verify`` + ``destroy``. 162 | 163 | ``bin/kitchen login`` 164 | ^^^^^^^^^^^^^^^^^^^^^ 165 | 166 | Gives you SSH access to the instance for manual testing. 167 | -------------------------------------------------------------------------------- /redis/files/redis-3.0.conf.jinja: -------------------------------------------------------------------------------- 1 | # Redis config 2 | {% from "redis/map.jinja" import redis_settings with context %} 3 | daemonize {{ redis_settings.daemonize }} 4 | 5 | pidfile {{ redis_settings.pidfile }} 6 | port {{ redis_settings.port }} 7 | 8 | {% if redis_settings.bind is defined %} 9 | bind {{ redis_settings.bind }} 10 | {% endif -%} 11 | 12 | {% if redis_settings.unixsocket is defined %} 13 | unixsocket {{ redis_settings.unixsocket }} 14 | unixsocketperm {{ redis_settings.unixsocketperm }} 15 | {% endif -%} 16 | 17 | {% if redis_settings.timeout is defined %} 18 | timeout {{ redis_settings.timeout }} 19 | {% endif -%} 20 | 21 | {% if redis_settings.tcp_backlog is defined and redis_settings.tcp_backlog > 0 %} 22 | tcp-backlog {{ redis_settings.tcp_backlog }} 23 | {% endif -%} 24 | tcp-keepalive {{ redis_settings.tcp_keepalive }} 25 | 26 | loglevel {{ redis_settings.loglevel }} 27 | 28 | {% if redis_settings.syslog is defined %} 29 | syslog-enabled yes 30 | syslog-ident {{ redis_settings.syslog.ident }} 31 | syslog-facility {{ redis_settings.syslog.facility }} 32 | {% if redis_settings.syslog.nologfile is defined %} 33 | logfile "" 34 | {% else %} 35 | logfile {{ redis_settings.logfile }} 36 | {% endif -%} 37 | {% else %} 38 | logfile {{ redis_settings.logfile }} 39 | {% endif -%} 40 | 41 | databases {{ redis_settings.database_count }} 42 | 43 | {% for s in redis_settings.snapshots -%} 44 | save {{ s }} 45 | {% endfor %} 46 | 47 | stop-writes-on-bgsave-error {{ redis_settings.stop_writes_on_bgsave_error }} 48 | 49 | rdbcompression {{ redis_settings.rdbcompression }} 50 | rdbchecksum {{ redis_settings.rdbchecksum }} 51 | 52 | dbfilename {{ redis_settings.dbfilename }} 53 | dir {{ redis_settings.root_dir }} 54 | 55 | {% if redis_settings.slaveof is defined %} 56 | slaveof {{ redis_settings.slaveof.masterip }} {{ redis_settings.slaveof.masterport }} 57 | {% endif -%} 58 | 59 | {% if redis_settings.masterauth is defined %} 60 | masterauth {{ redis_settings.masterauth }} 61 | {% endif -%} 62 | 63 | slave-serve-stale-data {{ redis_settings.slave_serve_stale_data }} 64 | slave-read-only {{ redis_settings.slave_read_only }} 65 | 66 | {% if redis_settings.repl_diskless_sync is defined %} 67 | repl-diskless-sync {{ redis_settings.repl_diskless_sync }} 68 | repl-diskless-sync-delay {{ redis_settings.repl_diskless_sync_delay }} 69 | {% endif -%} 70 | 71 | {% if redis_settings.repl_ping_slave_period is defined %} 72 | repl-ping-slave-period {{ redis_settings.repl_ping_slave_period }} 73 | {% endif -%} 74 | 75 | {% if redis_settings.repl_timeout is defined %} 76 | repl-timeout {{ redis_settings.repl_timeout }} 77 | {% endif -%} 78 | 79 | repl-disable-tcp-nodelay {{ redis_settings.repl_disable_tcp_nodelay }} 80 | 81 | {% if redis_settings.repl_backlog_size is defined %} 82 | repl-backlog-size {{ redis_settings.repl_backlog_size }} 83 | {% endif -%} 84 | 85 | {% if redis_settings.repl_backlog_ttl is defined %} 86 | repl-backlog-ttl {{ redis_settings.repl_backlog_ttl }} 87 | {% endif -%} 88 | 89 | slave-priority {{ redis_settings.slave_priority }} 90 | 91 | {% if redis_settings.min_slaves_to_write is defined %} 92 | min-slaves-to-write {{ redis_settings.min_slaves_to_write }} 93 | {% endif -%} 94 | 95 | {% if redis_settings.min_slaves_max_lag is defined %} 96 | min-slaves-max-lag {{ redis_settings.min_slaves_max_lag }} 97 | {% endif -%} 98 | 99 | {% if redis_settings.pass is defined %} 100 | requirepass {{ redis_settings.pass }} 101 | {% endif -%} 102 | 103 | {% if redis_settings.rename_command is defined %} 104 | {% for k, v in redis_settings.rename_command.items() %} 105 | rename-command {{ k }} {{ v }} 106 | {% endfor %} 107 | {% endif -%} 108 | 109 | {% if redis_settings.maxclients is defined %} 110 | maxclients {{ redis_settings.maxclients }} 111 | {% endif -%} 112 | 113 | {% if redis_settings.maxmemory is defined %} 114 | maxmemory {{ redis_settings.maxmemory }} 115 | maxmemory-policy {{ redis_settings.maxmemory_policy }} 116 | maxmemory-samples {{ redis_settings.maxmemory_samples }} 117 | {% endif %} 118 | 119 | appendonly {{ redis_settings.appendonly }} 120 | appendfilename {{ redis_settings.appendfilename }} 121 | appendfsync {{ redis_settings.appendfsync }} 122 | 123 | no-appendfsync-on-rewrite {{ redis_settings.no_appendfsync_on_rewrite }} 124 | 125 | auto-aof-rewrite-percentage {{ redis_settings.auto_aof_rewrite_percentage }} 126 | auto-aof-rewrite-min-size {{ redis_settings.auto_aof_rewrite_min_size }} 127 | 128 | aof-load-truncated {{ redis_settings.aof_load_truncated }} 129 | 130 | 131 | lua-time-limit {{ redis_settings.lua_time_limit }} 132 | 133 | {% if redis_settings.cluster_enabled is defined %} 134 | cluster-enabled {{ redis_settings.cluster_enabled }} 135 | cluster-config-file {{ redis_settings.cluster_config_file }} 136 | cluster-node-timeout {{ redis_settings.cluster_node_timeout }} 137 | cluster-slave-validity-factor {{ redis_settings.cluster_slave_validity_factor }} 138 | cluster-migration-barrier {{ redis_settings.cluster_migration_barrier }} 139 | cluster-require-full-coverage {{ redis_settings.cluster_require_full_coverage }} 140 | {% endif %} 141 | 142 | slowlog-log-slower-than {{ redis_settings.slowlog_log_slower_than }} 143 | slowlog-max-len {{ redis_settings.slowlog_max_len }} 144 | 145 | latency-monitor-threshold {{ redis_settings.latency_monitor_threshold }} 146 | 147 | notify-keyspace-events {{ redis_settings.notify_keyspace_events }} 148 | 149 | {%- if redis_settings.extra_opts is defined %} 150 | {%- for option,value in redis_settings.extra_opts.items() %} 151 | {{ option }} {{ value }} 152 | {%- endfor %} 153 | {%- endif %} 154 | 155 | ############################### ADVANCED CONFIG ############################### 156 | 157 | hash-max-ziplist-entries 512 158 | hash-max-ziplist-value 64 159 | 160 | list-max-ziplist-entries 512 161 | list-max-ziplist-value 64 162 | 163 | set-max-intset-entries 512 164 | 165 | zset-max-ziplist-entries 128 166 | zset-max-ziplist-value 64 167 | 168 | hll-sparse-max-bytes 3000 169 | 170 | activerehashing yes 171 | 172 | client-output-buffer-limit normal 0 0 0 173 | client-output-buffer-limit slave 256mb 64mb 60 174 | client-output-buffer-limit pubsub 32mb 8mb 60 175 | 176 | hz 10 177 | 178 | aof-rewrite-incremental-fsync yes 179 | -------------------------------------------------------------------------------- /AUTHORS.md: -------------------------------------------------------------------------------- 1 | # Authors 2 | 3 | This list is sorted by the number of commits per contributor in _descending_ order. 4 | 5 | Avatar|Contributor|Contributions 6 | :-:|---|:-: 7 | @myii|[@myii](https://github.com/myii)|120 8 | @noelmcloughlin|[@noelmcloughlin](https://github.com/noelmcloughlin)|15 9 | @gravyboat|[@gravyboat](https://github.com/gravyboat)|14 10 | @nmadhok|[@nmadhok](https://github.com/nmadhok)|13 11 | @alex-leonhardt|[@alex-leonhardt](https://github.com/alex-leonhardt)|9 12 | @aboe76|[@aboe76](https://github.com/aboe76)|9 13 | @techhat|[@techhat](https://github.com/techhat)|5 14 | @stp-ip|[@stp-ip](https://github.com/stp-ip)|5 15 | @whiteinge|[@whiteinge](https://github.com/whiteinge)|5 16 | @babilen|[@babilen](https://github.com/babilen)|5 17 | @dafyddj|[@dafyddj](https://github.com/dafyddj)|3 18 | @dseira|[@dseira](https://github.com/dseira)|3 19 | @javierbertoli|[@javierbertoli](https://github.com/javierbertoli)|3 20 | @auser|[@auser](https://github.com/auser)|3 21 | @myoung34|[@myoung34](https://github.com/myoung34)|3 22 | @amontalban|[@amontalban](https://github.com/amontalban)|2 23 | @bkmit|[@bkmit](https://github.com/bkmit)|2 24 | @dmyerscough|[@dmyerscough](https://github.com/dmyerscough)|2 25 | @envintus|[@envintus](https://github.com/envintus)|2 26 | @DrDarch|[@DrDarch](https://github.com/DrDarch)|2 27 | @joshboon|[@joshboon](https://github.com/joshboon)|2 28 | @roock|[@roock](https://github.com/roock)|2 29 | @stamak|[@stamak](https://github.com/stamak)|2 30 | @stevendgonzales|[@stevendgonzales](https://github.com/stevendgonzales)|2 31 | @abednarik|[@abednarik](https://github.com/abednarik)|2 32 | @puneetk|[@puneetk](https://github.com/puneetk)|2 33 | @streambinder|[@streambinder](https://github.com/streambinder)|2 34 | @viq|[@viq](https://github.com/viq)|2 35 | @ahmadsherif|[@ahmadsherif](https://github.com/ahmadsherif)|1 36 | @andygabby|[@andygabby](https://github.com/andygabby)|1 37 | @baby-gnu|[@baby-gnu](https://github.com/baby-gnu)|1 38 | @ezheidtmann|[@ezheidtmann](https://github.com/ezheidtmann)|1 39 | @syphernl|[@syphernl](https://github.com/syphernl)|1 40 | @mattbarto|[@mattbarto](https://github.com/mattbarto)|1 41 | @kevops|[@kevops](https://github.com/kevops)|1 42 | @mskim5383|[@mskim5383](https://github.com/mskim5383)|1 43 | @tmandry|[@tmandry](https://github.com/tmandry)|1 44 | 45 | --- 46 | 47 | Auto-generated by a [forked version](https://github.com/myii/maintainer) of [gaocegege/maintainer](https://github.com/gaocegege/maintainer) on 2022-02-12. 48 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | ################################################################################ 5 | # NOTE: This file is UNMAINTAINED; it is provided for references purposes only. 6 | # No guarantees are tendered that this structure will work after 2020. 7 | ################################################################################ 8 | # * https://en.wikipedia.org/wiki/Travis_CI: 9 | # - "... free open-source plans were removed in [sic] the end of 2020" 10 | # - https://blog.travis-ci.com/2020-11-02-travis-ci-new-billing 11 | # - https://ropensci.org/technotes/2020/11/19/moving-away-travis/ 12 | ################################################################################ 13 | ## Machine config 14 | os: 'linux' 15 | arch: 'amd64' 16 | dist: 'bionic' 17 | version: '~> 1.0' 18 | 19 | ## Language and cache config 20 | language: 'ruby' 21 | cache: 'bundler' 22 | 23 | ## Services config 24 | services: 25 | - docker 26 | 27 | ## Script to run for the test stage 28 | script: 29 | - bin/kitchen verify "${INSTANCE}" 30 | 31 | ## Stages and jobs matrix 32 | stages: 33 | - test 34 | # # As part of the switch away from Travis CI, ensure that the `release` stage 35 | # # is not run inadvertently 36 | # - name: 'release' 37 | # if: 'branch = master AND type != pull_request' 38 | jobs: 39 | include: 40 | ## Define the test stage that runs the linters (and testing matrix, if applicable) 41 | 42 | # Run all of the linters in a single job 43 | - language: 'node_js' 44 | node_js: 'lts/*' 45 | env: 'Lint' 46 | name: 'Lint: salt-lint, yamllint, rubocop, shellcheck & commitlint' 47 | before_install: 'skip' 48 | script: 49 | # Install and run `salt-lint` 50 | - pip install --user salt-lint 51 | - git ls-files -- '*.sls' '*.jinja' '*.j2' '*.tmpl' '*.tst' 52 | | xargs salt-lint 53 | # Install and run `yamllint` 54 | # Need at least `v1.17.0` for the `yaml-files` setting 55 | - pip install --user yamllint>=1.17.0 56 | - yamllint -s . 57 | # Install and run `rubocop` 58 | - gem install rubocop 59 | - rubocop -d 60 | # Run `shellcheck` (already pre-installed in Travis) 61 | - shellcheck --version 62 | - git ls-files -- '*.sh' '*.bash' '*.ksh' 63 | | xargs shellcheck 64 | # Install and run `commitlint` 65 | - npm i -D @commitlint/config-conventional 66 | @commitlint/travis-cli 67 | - commitlint-travis 68 | 69 | # Run `pre-commit` linters in a single job 70 | - language: 'python' 71 | env: 'Lint_pre-commit' 72 | name: 'Lint: pre-commit' 73 | before_install: 'skip' 74 | cache: 75 | directories: 76 | - $HOME/.cache/pre-commit 77 | script: 78 | # Install and run `pre-commit` 79 | - pip install pre-commit==2.7.1 80 | - pre-commit run --all-files --color always --verbose 81 | - pre-commit run --color always --hook-stage manual --verbose commitlint-travis 82 | 83 | ## Define the rest of the matrix based on Kitchen testing 84 | # Make sure the instances listed below match up with 85 | # the `platforms` defined in `kitchen.yml` 86 | # - env: INSTANCE=default-debian-11-tiamat-py3 87 | # - env: INSTANCE=default-debian-10-tiamat-py3 88 | # - env: INSTANCE=default-debian-9-tiamat-py3 89 | # - env: INSTANCE=default-ubuntu-2204-tiamat-py3 90 | # - env: INSTANCE=default-ubuntu-2004-tiamat-py3 91 | # - env: INSTANCE=default-ubuntu-1804-tiamat-py3 92 | # - env: INSTANCE=default-centos-stream8-tiamat-py3 93 | # - env: INSTANCE=default-centos-7-tiamat-py3 94 | # - env: INSTANCE=default-amazonlinux-2-tiamat-py3 95 | # - env: INSTANCE=default-oraclelinux-8-tiamat-py3 96 | # - env: INSTANCE=default-oraclelinux-7-tiamat-py3 97 | # - env: INSTANCE=default-almalinux-8-tiamat-py3 98 | # - env: INSTANCE=default-rockylinux-8-tiamat-py3 99 | - env: INSTANCE=default-debian-11-master-py3 100 | - env: INSTANCE=default-debian-10-master-py3 101 | - env: INSTANCE=default-debian-9-master-py3 102 | - env: INSTANCE=default-ubuntu-2204-master-py3 103 | - env: INSTANCE=default-ubuntu-2004-master-py3 104 | - env: INSTANCE=default-ubuntu-1804-master-py3 105 | - env: INSTANCE=default-centos-stream8-master-py3 106 | - env: INSTANCE=default-centos-7-master-py3 107 | - env: INSTANCE=default-fedora-36-master-py3 108 | - env: INSTANCE=default-fedora-35-master-py3 109 | - env: INSTANCE=default-opensuse-leap-153-master-py3 110 | - env: INSTANCE=default-opensuse-tmbl-latest-master-py3 111 | - env: INSTANCE=default-amazonlinux-2-master-py3 112 | - env: INSTANCE=default-oraclelinux-8-master-py3 113 | - env: INSTANCE=default-oraclelinux-7-master-py3 114 | - env: INSTANCE=default-arch-base-latest-master-py3 115 | # - env: INSTANCE=default-gentoo-stage3-latest-master-py3 116 | # - env: INSTANCE=default-gentoo-stage3-systemd-master-py3 117 | - env: INSTANCE=default-almalinux-8-master-py3 118 | - env: INSTANCE=default-rockylinux-8-master-py3 119 | # - env: INSTANCE=default-debian-11-3004-1-py3 120 | # - env: INSTANCE=default-debian-10-3004-1-py3 121 | # - env: INSTANCE=default-debian-9-3004-1-py3 122 | # - env: INSTANCE=default-ubuntu-2204-3004-1-py3 123 | # - env: INSTANCE=default-ubuntu-2004-3004-1-py3 124 | # - env: INSTANCE=default-ubuntu-1804-3004-1-py3 125 | # - env: INSTANCE=default-centos-stream8-3004-1-py3 126 | # - env: INSTANCE=default-centos-7-3004-1-py3 127 | # - env: INSTANCE=default-fedora-36-3004-1-py3 128 | # - env: INSTANCE=default-fedora-35-3004-1-py3 129 | # - env: INSTANCE=default-amazonlinux-2-3004-1-py3 130 | # - env: INSTANCE=default-oraclelinux-8-3004-1-py3 131 | # - env: INSTANCE=default-oraclelinux-7-3004-1-py3 132 | # - env: INSTANCE=default-arch-base-latest-3004-1-py3 133 | # - env: INSTANCE=default-gentoo-stage3-latest-3004-1-py3 134 | # - env: INSTANCE=default-gentoo-stage3-systemd-3004-1-py3 135 | # - env: INSTANCE=default-almalinux-8-3004-1-py3 136 | # - env: INSTANCE=default-rockylinux-8-3004-1-py3 137 | # - env: INSTANCE=default-opensuse-leap-153-3004-0-py3 138 | # - env: INSTANCE=default-opensuse-tmbl-latest-3004-0-py3 139 | # - env: INSTANCE=default-debian-10-3003-4-py3 140 | # - env: INSTANCE=default-debian-9-3003-4-py3 141 | # - env: INSTANCE=default-ubuntu-2004-3003-4-py3 142 | # - env: INSTANCE=default-ubuntu-1804-3003-4-py3 143 | # - env: INSTANCE=default-centos-stream8-3003-4-py3 144 | # - env: INSTANCE=default-centos-7-3003-4-py3 145 | # - env: INSTANCE=default-amazonlinux-2-3003-4-py3 146 | # - env: INSTANCE=default-oraclelinux-8-3003-4-py3 147 | # - env: INSTANCE=default-oraclelinux-7-3003-4-py3 148 | # - env: INSTANCE=default-almalinux-8-3003-4-py3 149 | 150 | ## Define the release stage that runs `semantic-release` 151 | - stage: 'release' 152 | language: 'node_js' 153 | node_js: 'lts/*' 154 | env: 'Release' 155 | name: 'Run semantic-release inc. file updates to AUTHORS, CHANGELOG & FORMULA' 156 | before_install: 'skip' 157 | script: 158 | # Update `AUTHORS.md` 159 | - export MAINTAINER_TOKEN=${GH_TOKEN} 160 | - go get github.com/myii/maintainer 161 | - maintainer contributor 162 | 163 | # Install all dependencies required for `semantic-release` 164 | - npm i -D @semantic-release/changelog@3 165 | @semantic-release/exec@3 166 | @semantic-release/git@7 167 | deploy: 168 | provider: 'script' 169 | # Opt-in to `dpl v2` to complete the Travis build config validation (beta) 170 | # * https://docs.travis-ci.com/user/build-config-validation 171 | # Deprecated `skip_cleanup` can now be avoided, `cleanup: false` is by default 172 | edge: true 173 | # Run `semantic-release` 174 | script: 'npx semantic-release@15.14' 175 | 176 | # Notification options: `always`, `never` or `change` 177 | notifications: 178 | webhooks: 179 | if: 'repo = saltstack-formulas/redis-formula' 180 | urls: 181 | - https://saltstack-formulas.zulipchat.com/api/v1/external/travis?api_key=HsIq3o5QmLxdnVCKF9is0FUIpkpAY79P&stream=CI&topic=saltstack-formulas%2Fredis-formula&ignore_pull_requests=true 182 | on_success: always # default: always 183 | on_failure: always # default: always 184 | on_start: always # default: never 185 | on_cancel: always # default: always 186 | on_error: always # default: always 187 | -------------------------------------------------------------------------------- /docs/AUTHORS.rst: -------------------------------------------------------------------------------- 1 | .. role:: raw-html-m2r(raw) 2 | :format: html 3 | 4 | 5 | Authors 6 | ======= 7 | 8 | This list is sorted by the number of commits per contributor in *descending* order. 9 | 10 | .. list-table:: 11 | :header-rows: 1 12 | 13 | * - Avatar 14 | - Contributor 15 | - Contributions 16 | * - :raw-html-m2r:`@myii` 17 | - `@myii `_ 18 | - 120 19 | * - :raw-html-m2r:`@noelmcloughlin` 20 | - `@noelmcloughlin `_ 21 | - 15 22 | * - :raw-html-m2r:`@gravyboat` 23 | - `@gravyboat `_ 24 | - 14 25 | * - :raw-html-m2r:`@nmadhok` 26 | - `@nmadhok `_ 27 | - 13 28 | * - :raw-html-m2r:`@alex-leonhardt` 29 | - `@alex-leonhardt `_ 30 | - 9 31 | * - :raw-html-m2r:`@aboe76` 32 | - `@aboe76 `_ 33 | - 9 34 | * - :raw-html-m2r:`@techhat` 35 | - `@techhat `_ 36 | - 5 37 | * - :raw-html-m2r:`@stp-ip` 38 | - `@stp-ip `_ 39 | - 5 40 | * - :raw-html-m2r:`@whiteinge` 41 | - `@whiteinge `_ 42 | - 5 43 | * - :raw-html-m2r:`@babilen` 44 | - `@babilen `_ 45 | - 5 46 | * - :raw-html-m2r:`@dafyddj` 47 | - `@dafyddj `_ 48 | - 3 49 | * - :raw-html-m2r:`@dseira` 50 | - `@dseira `_ 51 | - 3 52 | * - :raw-html-m2r:`@javierbertoli` 53 | - `@javierbertoli `_ 54 | - 3 55 | * - :raw-html-m2r:`@auser` 56 | - `@auser `_ 57 | - 3 58 | * - :raw-html-m2r:`@myoung34` 59 | - `@myoung34 `_ 60 | - 3 61 | * - :raw-html-m2r:`@amontalban` 62 | - `@amontalban `_ 63 | - 2 64 | * - :raw-html-m2r:`@bkmit` 65 | - `@bkmit `_ 66 | - 2 67 | * - :raw-html-m2r:`@dmyerscough` 68 | - `@dmyerscough `_ 69 | - 2 70 | * - :raw-html-m2r:`@envintus` 71 | - `@envintus `_ 72 | - 2 73 | * - :raw-html-m2r:`@DrDarch` 74 | - `@DrDarch `_ 75 | - 2 76 | * - :raw-html-m2r:`@joshboon` 77 | - `@joshboon `_ 78 | - 2 79 | * - :raw-html-m2r:`@roock` 80 | - `@roock `_ 81 | - 2 82 | * - :raw-html-m2r:`@stamak` 83 | - `@stamak `_ 84 | - 2 85 | * - :raw-html-m2r:`@stevendgonzales` 86 | - `@stevendgonzales `_ 87 | - 2 88 | * - :raw-html-m2r:`@abednarik` 89 | - `@abednarik `_ 90 | - 2 91 | * - :raw-html-m2r:`@puneetk` 92 | - `@puneetk `_ 93 | - 2 94 | * - :raw-html-m2r:`@streambinder` 95 | - `@streambinder `_ 96 | - 2 97 | * - :raw-html-m2r:`@viq` 98 | - `@viq `_ 99 | - 2 100 | * - :raw-html-m2r:`@ahmadsherif` 101 | - `@ahmadsherif `_ 102 | - 1 103 | * - :raw-html-m2r:`@andygabby` 104 | - `@andygabby `_ 105 | - 1 106 | * - :raw-html-m2r:`@baby-gnu` 107 | - `@baby-gnu `_ 108 | - 1 109 | * - :raw-html-m2r:`@ezheidtmann` 110 | - `@ezheidtmann `_ 111 | - 1 112 | * - :raw-html-m2r:`@syphernl` 113 | - `@syphernl `_ 114 | - 1 115 | * - :raw-html-m2r:`@mattbarto` 116 | - `@mattbarto `_ 117 | - 1 118 | * - :raw-html-m2r:`@kevops` 119 | - `@kevops `_ 120 | - 1 121 | * - :raw-html-m2r:`@mskim5383` 122 | - `@mskim5383 `_ 123 | - 1 124 | * - :raw-html-m2r:`@tmandry` 125 | - `@tmandry `_ 126 | - 1 127 | 128 | 129 | ---- 130 | 131 | Auto-generated by a `forked version `_ of `gaocegege/maintainer `_ on 2022-02-12. 132 | -------------------------------------------------------------------------------- /redis/files/redis-3.2.conf.multi.jinja: -------------------------------------------------------------------------------- 1 | # Redis config 2 | {%- if redis_settings.include is defined %} 3 | {%- for include in redis_settings.include %} 4 | include {{ include }} 5 | {%- endfor %} 6 | {%- endif %} 7 | {%- if redis_settings.daemonize is defined %} 8 | daemonize {{ redis_settings.daemonize }} 9 | {%- else %} 10 | daemonize yes 11 | {%- endif %} 12 | {%- if redis_settings.supervised is defined %} 13 | supervised {{ redis_settings.supervised }} 14 | {%- endif %} 15 | 16 | pidfile {{ redis_settings.pidfile }} 17 | port {{ redis_settings.port }} 18 | 19 | {% if redis_settings.bind is defined %} 20 | bind {{ redis_settings.bind }} 21 | {% endif -%} 22 | 23 | {% if redis_settings.unixsocket is defined %} 24 | unixsocket {{ redis_settings.unixsocket }} 25 | unixsocketperm {{ redis_settings.unixsocketperm }} 26 | {% endif -%} 27 | 28 | {% if redis_settings.tcp_backlog is defined and redis_settings.tcp_backlog > 0 %} 29 | tcp-backlog {{ redis_settings.tcp_backlog }} 30 | {% endif -%} 31 | 32 | {%- if redis_settings.timeout is defined %} 33 | timeout {{ redis_settings.timeout }} 34 | {%- endif %} 35 | 36 | tcp-keepalive {{ redis_settings.tcp_keepalive }} 37 | 38 | loglevel {{ redis_settings.loglevel }} 39 | 40 | {% if redis_settings.syslog is defined %} 41 | syslog-enabled yes 42 | syslog-ident {{ redis_settings.syslog.ident }} 43 | syslog-facility {{ redis_settings.syslog.facility }} 44 | {% if redis_settings.syslog.nologfile is defined %} 45 | logfile "" 46 | {% else %} 47 | logfile {{ redis_settings.logfile }} 48 | {% endif -%} 49 | {% else %} 50 | logfile {{ redis_settings.logfile }} 51 | {% endif -%} 52 | 53 | databases {{ redis_settings.database_count }} 54 | 55 | {% for s in redis_settings.snapshots -%} 56 | save {{ s }} 57 | {% endfor %} 58 | 59 | stop-writes-on-bgsave-error {{ redis_settings.stop_writes_on_bgsave_error }} 60 | 61 | rdbcompression {{ redis_settings.rdbcompression }} 62 | rdbchecksum {{ redis_settings.rdbchecksum }} 63 | 64 | dbfilename {{ redis_settings.dbfilename }} 65 | dir {{ redis_settings.root_dir }} 66 | 67 | {% if redis_settings.slaveof is defined %} 68 | slaveof {{ redis_settings.slaveof.masterip }} {{ redis_settings.slaveof.masterport }} 69 | {% endif -%} 70 | 71 | {% if redis_settings.masterauth is defined %} 72 | masterauth {{ redis_settings.masterauth }} 73 | {% endif -%} 74 | 75 | slave-serve-stale-data {{ redis_settings.slave_serve_stale_data }} 76 | slave-read-only {{ redis_settings.slave_read_only }} 77 | 78 | {%- if redis_settings.repl_diskless_sync is defined %} 79 | repl-diskless-sync {{ redis_settings.repl_diskless_sync }} 80 | {%- endif %} 81 | 82 | {%- if redis_settings.repl_diskless_sync_delay is defined %} 83 | repl-diskless-sync-delay {{ redis_settings.repl_diskless_sync_delay }} 84 | {%- endif %} 85 | 86 | {% if redis_settings.repl_ping_slave_period is defined %} 87 | repl-ping-slave-period {{ redis_settings.repl_ping_slave_period }} 88 | {% endif -%} 89 | 90 | {% if redis_settings.repl_timeout is defined %} 91 | repl-timeout {{ redis_settings.repl_timeout }} 92 | {% endif -%} 93 | 94 | repl-disable-tcp-nodelay {{ redis_settings.repl_disable_tcp_nodelay }} 95 | 96 | {% if redis_settings.repl_backlog_size is defined %} 97 | repl-backlog-size {{ redis_settings.repl_backlog_size }} 98 | {% endif -%} 99 | 100 | {% if redis_settings.repl_backlog_ttl is defined %} 101 | repl-backlog-ttl {{ redis_settings.repl_backlog_ttl }} 102 | {% endif -%} 103 | 104 | slave-priority {{ redis_settings.slave_priority }} 105 | 106 | {% if redis_settings.min_slaves_to_write is defined %} 107 | min-slaves-to-write {{ redis_settings.min_slaves_to_write }} 108 | {% endif -%} 109 | 110 | {% if redis_settings.min_slaves_max_lag is defined %} 111 | min-slaves-max-lag {{ redis_settings.min_slaves_max_lag }} 112 | {% endif -%} 113 | 114 | {%- if redis_settings.slave_announce_ip is defined %} 115 | slave-announce-ip {{ redis_settings.slave_announce_ip }} 116 | {%- endif %} 117 | {%- if redis_settings.slave_announce_port is defined %} 118 | slave-announce-port {{ redis_settings.slave_announce_port }} 119 | {%- endif %} 120 | 121 | {% if redis_settings.pass is defined %} 122 | requirepass {{ redis_settings.pass }} 123 | {% endif -%} 124 | 125 | {% if redis_settings.rename_command is defined %} 126 | {% for k, v in redis_settings.rename_command.items() %} 127 | rename-command {{ k }} {{ v }} 128 | {% endfor %} 129 | {% endif -%} 130 | 131 | {% if redis_settings.maxclients is defined %} 132 | maxclients {{ redis_settings.maxclients }} 133 | {% endif -%} 134 | 135 | {% if redis_settings.maxmemory is defined %} 136 | maxmemory {{ redis_settings.maxmemory }} 137 | maxmemory-policy {{ redis_settings.maxmemory_policy }} 138 | maxmemory-samples {{ redis_settings.maxmemory_samples }} 139 | {% endif %} 140 | 141 | appendonly {{ redis_settings.appendonly }} 142 | appendfilename {{ redis_settings.appendfilename }} 143 | appendfsync {{ redis_settings.appendfsync }} 144 | 145 | no-appendfsync-on-rewrite {{ redis_settings.no_appendfsync_on_rewrite }} 146 | auto-aof-rewrite-percentage {{ redis_settings.auto_aof_rewrite_percentage }} 147 | 148 | auto-aof-rewrite-min-size {{ redis_settings.auto_aof_rewrite_min_size }} 149 | 150 | {%- if redis_settings.aof_load_truncated is defined %} 151 | aof-load-truncated {{ redis_settings.aof_load_truncated }} 152 | {%- endif %} 153 | 154 | lua-time-limit {{ redis_settings.lua_time_limit }} 155 | 156 | {%- if redis_settings.cluster_enabled is defined %} 157 | cluster-enabled {{ redis_settings.cluster_enabled }} 158 | {%- endif %} 159 | {%- if redis_settings.cluster_config_file is defined %} 160 | cluster-config-file {{ redis_settings.cluster_config_file }} 161 | {%- endif %} 162 | {%- if redis_settings.cluster_node_timeout is defined %} 163 | cluster-node-timeout {{ redis_settings.cluster_node_timeout }} 164 | {%- endif %} 165 | {%- if redis_settings.cluster_slave_validity_factor is defined %} 166 | cluster-slave-validity-factor {{ redis_settings.cluster_slave_validity_factor }} 167 | {%- endif %} 168 | {%- if redis_settings.cluster_migration_barrier is defined %} 169 | cluster-migration-barrier {{ redis_settings.cluster_migration_barrier }} 170 | {%- endif %} 171 | {%- if redis_settings.cluster_require_full_coverage is defined %} 172 | cluster-require-full-coverage {{ redis_settings.cluster_require_full_coverage }} 173 | {%- endif %} 174 | 175 | slowlog-log-slower-than {{ redis_settings.slowlog_log_slower_than }} 176 | slowlog-max-len {{ redis_settings.slowlog_max_len }} 177 | 178 | notify-keyspace-events {{ redis_settings.notify_keyspace_events }} 179 | 180 | {%- if redis_settings.latency_monitor_threshold is defined %} 181 | latency-monitor-threshold {{ redis_settings.latency_monitor_threshold }} 182 | {%- else %} 183 | latency-monitor-threshold 0 184 | {%- endif %} 185 | 186 | {%- if redis_settings.extra_opts is defined %} 187 | {%- for option,value in redis_settings.extra_opts.items() %} 188 | {{ option }} {{ value }} 189 | {%- endfor %} 190 | {%- endif %} 191 | 192 | ############################### ADVANCED CONFIG ############################### 193 | 194 | {%- if redis_settings.hash_max_ziplist_entries is defined %} 195 | hash-max-ziplist-entries {{ redis_settings.hash_max_ziplist_entries }} 196 | {%- else %} 197 | hash-max-ziplist-entries 512 198 | {%- endif %} 199 | {%- if redis_settings.hash_max_ziplist_value is defined %} 200 | hash-max-ziplist-value {{ redis_settings.hash_max_ziplist_value }} 201 | {%- else %} 202 | hash-max-ziplist-value 64 203 | {%- endif %} 204 | {%- if redis_settings.list_max_ziplist_entries is defined %} 205 | list-max-ziplist-entries {{ redis_settings.list_max_ziplist_entries }} 206 | {%- else %} 207 | list-max-ziplist-entries 512 208 | {%- endif %} 209 | {%- if redis_settings.list_max_ziplist_value is defined %} 210 | list-max-ziplist-value {{ redis_settings.list_max_ziplist_value }} 211 | {%- else %} 212 | list-max-ziplist-value 64 213 | {%- endif %} 214 | {%- if redis_settings.list_max_ziplist_size is defined %} 215 | list-max-ziplist-size {{ redis_settings.list_max_ziplist_size }} 216 | {%- else %} 217 | list-max-ziplist-size -2 218 | {%- endif %} 219 | {%- if redis_settings.list_compress_depth is defined %} 220 | list-compress-depth {{ redis_settings.list_compress_depth }} 221 | {%- else %} 222 | list-compress-depth 0 223 | {%- endif %} 224 | {%- if redis_settings.set_max_intset_entries is defined %} 225 | set-max-intset-entries {{ redis_settings.set_max_intset_entries }} 226 | {%- else %} 227 | set-max-intset-entries 512 228 | {%- endif %} 229 | {%- if redis_settings.zset_max_ziplist_entries is defined %} 230 | zset-max-ziplist-entries {{ redis_settings.zset_max_ziplist_entries }} 231 | {%- else %} 232 | zset-max-ziplist-entries 128 233 | {%- endif %} 234 | {%- if redis_settings.zset_max_ziplist_value is defined %} 235 | zset-max-ziplist-value {{ redis_settings.zset_max_ziplist_value }} 236 | {%- else %} 237 | zset-max-ziplist-value 64 238 | {%- endif %} 239 | {%- if redis_settings.activerehashing is defined %} 240 | activerehashing {{ redis_settings.activerehashing }} 241 | {%- else %} 242 | activerehashing yes 243 | {%- endif %} 244 | {%- if redis_settings.client_output_buffer_limit is defined %} 245 | {%- for class,options in redis_settings.client_output_buffer_limit.items() %} 246 | client-output-buffer-limit {{ class }} {{ options }} 247 | {%- endfor %} 248 | {%- else %} 249 | client-output-buffer-limit normal 0 0 0 250 | client-output-buffer-limit slave 256mb 64mb 60 251 | client-output-buffer-limit pubsub 32mb 8mb 60 252 | {%- endif %} 253 | {%- if redis_settings.hz is defined %} 254 | hz {{ redis_settings.hz }} 255 | {%- else %} 256 | hz 10 257 | {%- endif %} 258 | {%- if redis_settings.aof_rewrite_incremental_fsync is defined %} 259 | aof-rewrite-incremental-fsync {{ redis_settings.aof_rewrite_incremental_fsync }} 260 | {%- else %} 261 | aof-rewrite-incremental-fsync yes 262 | {%- endif %} 263 | 264 | {%- if redis_settings['protected-mode'] is defined %} 265 | protected-mode {{ redis_settings['protected-mode'] }} 266 | {%- else %} 267 | protected-mode yes 268 | {%- endif %} 269 | 270 | -------------------------------------------------------------------------------- /redis/files/redis-3.2.conf.jinja: -------------------------------------------------------------------------------- 1 | # Redis config 2 | {% from "redis/map.jinja" import redis_settings with context %} 3 | {%- if redis_settings.include is defined %} 4 | {%- for include in redis_settings.include %} 5 | include {{ include }} 6 | {%- endfor %} 7 | {%- endif %} 8 | {%- if redis_settings.daemonize is defined %} 9 | daemonize {{ redis_settings.daemonize }} 10 | {%- else %} 11 | daemonize yes 12 | {%- endif %} 13 | {%- if redis_settings.supervised is defined %} 14 | supervised {{ redis_settings.supervised }} 15 | {%- endif %} 16 | 17 | pidfile {{ redis_settings.pidfile }} 18 | port {{ redis_settings.port }} 19 | 20 | {% if redis_settings.bind is defined %} 21 | bind {{ redis_settings.bind }} 22 | {% endif -%} 23 | 24 | {% if redis_settings.unixsocket is defined %} 25 | unixsocket {{ redis_settings.unixsocket }} 26 | unixsocketperm {{ redis_settings.unixsocketperm }} 27 | {% endif -%} 28 | 29 | {% if redis_settings.tcp_backlog is defined and redis_settings.tcp_backlog > 0 %} 30 | tcp-backlog {{ redis_settings.tcp_backlog }} 31 | {% endif -%} 32 | 33 | {%- if redis_settings.timeout is defined %} 34 | timeout {{ redis_settings.timeout }} 35 | {%- endif %} 36 | 37 | tcp-keepalive {{ redis_settings.tcp_keepalive }} 38 | 39 | loglevel {{ redis_settings.loglevel }} 40 | 41 | {% if redis_settings.syslog is defined %} 42 | syslog-enabled yes 43 | syslog-ident {{ redis_settings.syslog.ident }} 44 | syslog-facility {{ redis_settings.syslog.facility }} 45 | {% if redis_settings.syslog.nologfile is defined %} 46 | logfile "" 47 | {% else %} 48 | logfile {{ redis_settings.logfile }} 49 | {% endif -%} 50 | {% else %} 51 | logfile {{ redis_settings.logfile }} 52 | {% endif -%} 53 | 54 | databases {{ redis_settings.database_count }} 55 | 56 | {% for s in redis_settings.snapshots -%} 57 | save {{ s }} 58 | {% endfor %} 59 | 60 | stop-writes-on-bgsave-error {{ redis_settings.stop_writes_on_bgsave_error }} 61 | 62 | rdbcompression {{ redis_settings.rdbcompression }} 63 | rdbchecksum {{ redis_settings.rdbchecksum }} 64 | 65 | dbfilename {{ redis_settings.dbfilename }} 66 | dir {{ redis_settings.root_dir }} 67 | 68 | {% if redis_settings.slaveof is defined %} 69 | slaveof {{ redis_settings.slaveof.masterip }} {{ redis_settings.slaveof.masterport }} 70 | {% endif -%} 71 | 72 | {% if redis_settings.masterauth is defined %} 73 | masterauth {{ redis_settings.masterauth }} 74 | {% endif -%} 75 | 76 | slave-serve-stale-data {{ redis_settings.slave_serve_stale_data }} 77 | slave-read-only {{ redis_settings.slave_read_only }} 78 | 79 | {%- if redis_settings.repl_diskless_sync is defined %} 80 | repl-diskless-sync {{ redis_settings.repl_diskless_sync }} 81 | {%- endif %} 82 | 83 | {%- if redis_settings.repl_diskless_sync_delay is defined %} 84 | repl-diskless-sync-delay {{ redis_settings.repl_diskless_sync_delay }} 85 | {%- endif %} 86 | 87 | {% if redis_settings.repl_ping_slave_period is defined %} 88 | repl-ping-slave-period {{ redis_settings.repl_ping_slave_period }} 89 | {% endif -%} 90 | 91 | {% if redis_settings.repl_timeout is defined %} 92 | repl-timeout {{ redis_settings.repl_timeout }} 93 | {% endif -%} 94 | 95 | repl-disable-tcp-nodelay {{ redis_settings.repl_disable_tcp_nodelay }} 96 | 97 | {% if redis_settings.repl_backlog_size is defined %} 98 | repl-backlog-size {{ redis_settings.repl_backlog_size }} 99 | {% endif -%} 100 | 101 | {% if redis_settings.repl_backlog_ttl is defined %} 102 | repl-backlog-ttl {{ redis_settings.repl_backlog_ttl }} 103 | {% endif -%} 104 | 105 | slave-priority {{ redis_settings.slave_priority }} 106 | 107 | {% if redis_settings.min_slaves_to_write is defined %} 108 | min-slaves-to-write {{ redis_settings.min_slaves_to_write }} 109 | {% endif -%} 110 | 111 | {% if redis_settings.min_slaves_max_lag is defined %} 112 | min-slaves-max-lag {{ redis_settings.min_slaves_max_lag }} 113 | {% endif -%} 114 | 115 | {%- if redis_settings.slave_announce_ip is defined %} 116 | slave-announce-ip {{ redis_settings.slave_announce_ip }} 117 | {%- endif %} 118 | {%- if redis_settings.slave_announce_port is defined %} 119 | slave-announce-port {{ redis_settings.slave_announce_port }} 120 | {%- endif %} 121 | 122 | {% if redis_settings.pass is defined %} 123 | requirepass {{ redis_settings.pass }} 124 | {% endif -%} 125 | 126 | {% if redis_settings.rename_command is defined %} 127 | {% for k, v in redis_settings.rename_command.items() %} 128 | rename-command {{ k }} {{ v }} 129 | {% endfor %} 130 | {% endif -%} 131 | 132 | {% if redis_settings.maxclients is defined %} 133 | maxclients {{ redis_settings.maxclients }} 134 | {% endif -%} 135 | 136 | {% if redis_settings.maxmemory is defined %} 137 | maxmemory {{ redis_settings.maxmemory }} 138 | maxmemory-policy {{ redis_settings.maxmemory_policy }} 139 | maxmemory-samples {{ redis_settings.maxmemory_samples }} 140 | {% endif %} 141 | 142 | appendonly {{ redis_settings.appendonly }} 143 | appendfilename {{ redis_settings.appendfilename }} 144 | appendfsync {{ redis_settings.appendfsync }} 145 | 146 | no-appendfsync-on-rewrite {{ redis_settings.no_appendfsync_on_rewrite }} 147 | auto-aof-rewrite-percentage {{ redis_settings.auto_aof_rewrite_percentage }} 148 | 149 | auto-aof-rewrite-min-size {{ redis_settings.auto_aof_rewrite_min_size }} 150 | 151 | {%- if redis_settings.aof_load_truncated is defined %} 152 | aof-load-truncated {{ redis_settings.aof_load_truncated }} 153 | {%- endif %} 154 | 155 | lua-time-limit {{ redis_settings.lua_time_limit }} 156 | 157 | {%- if redis_settings.cluster_enabled is defined %} 158 | cluster-enabled {{ redis_settings.cluster_enabled }} 159 | {%- endif %} 160 | {%- if redis_settings.cluster_config_file is defined %} 161 | cluster-config-file {{ redis_settings.cluster_config_file }} 162 | {%- endif %} 163 | {%- if redis_settings.cluster_node_timeout is defined %} 164 | cluster-node-timeout {{ redis_settings.cluster_node_timeout }} 165 | {%- endif %} 166 | {%- if redis_settings.cluster_slave_validity_factor is defined %} 167 | cluster-slave-validity-factor {{ redis_settings.cluster_slave_validity_factor }} 168 | {%- endif %} 169 | {%- if redis_settings.cluster_migration_barrier is defined %} 170 | cluster-migration-barrier {{ redis_settings.cluster_migration_barrier }} 171 | {%- endif %} 172 | {%- if redis_settings.cluster_require_full_coverage is defined %} 173 | cluster-require-full-coverage {{ redis_settings.cluster_require_full_coverage }} 174 | {%- endif %} 175 | 176 | slowlog-log-slower-than {{ redis_settings.slowlog_log_slower_than }} 177 | slowlog-max-len {{ redis_settings.slowlog_max_len }} 178 | 179 | notify-keyspace-events {{ redis_settings.notify_keyspace_events }} 180 | 181 | {%- if redis_settings.latency_monitor_threshold is defined %} 182 | latency-monitor-threshold {{ redis_settings.latency_monitor_threshold }} 183 | {%- else %} 184 | latency-monitor-threshold 0 185 | {%- endif %} 186 | 187 | {%- if redis_settings.extra_opts is defined %} 188 | {%- for option,value in redis_settings.extra_opts.items() %} 189 | {{ option }} {{ value }} 190 | {%- endfor %} 191 | {%- endif %} 192 | 193 | ############################### ADVANCED CONFIG ############################### 194 | 195 | {%- if redis_settings.hash_max_ziplist_entries is defined %} 196 | hash-max-ziplist-entries {{ redis_settings.hash_max_ziplist_entries }} 197 | {%- else %} 198 | hash-max-ziplist-entries 512 199 | {%- endif %} 200 | {%- if redis_settings.hash_max_ziplist_value is defined %} 201 | hash-max-ziplist-value {{ redis_settings.hash_max_ziplist_value }} 202 | {%- else %} 203 | hash-max-ziplist-value 64 204 | {%- endif %} 205 | {%- if redis_settings.list_max_ziplist_entries is defined %} 206 | list-max-ziplist-entries {{ redis_settings.list_max_ziplist_entries }} 207 | {%- else %} 208 | list-max-ziplist-entries 512 209 | {%- endif %} 210 | {%- if redis_settings.list_max_ziplist_value is defined %} 211 | list-max-ziplist-value {{ redis_settings.list_max_ziplist_value }} 212 | {%- else %} 213 | list-max-ziplist-value 64 214 | {%- endif %} 215 | {%- if redis_settings.list_max_ziplist_size is defined %} 216 | list-max-ziplist-size {{ redis_settings.list_max_ziplist_size }} 217 | {%- else %} 218 | list-max-ziplist-size -2 219 | {%- endif %} 220 | {%- if redis_settings.list_compress_depth is defined %} 221 | list-compress-depth {{ redis_settings.list_compress_depth }} 222 | {%- else %} 223 | list-compress-depth 0 224 | {%- endif %} 225 | {%- if redis_settings.set_max_intset_entries is defined %} 226 | set-max-intset-entries {{ redis_settings.set_max_intset_entries }} 227 | {%- else %} 228 | set-max-intset-entries 512 229 | {%- endif %} 230 | {%- if redis_settings.zset_max_ziplist_entries is defined %} 231 | zset-max-ziplist-entries {{ redis_settings.zset_max_ziplist_entries }} 232 | {%- else %} 233 | zset-max-ziplist-entries 128 234 | {%- endif %} 235 | {%- if redis_settings.zset_max_ziplist_value is defined %} 236 | zset-max-ziplist-value {{ redis_settings.zset_max_ziplist_value }} 237 | {%- else %} 238 | zset-max-ziplist-value 64 239 | {%- endif %} 240 | {%- if redis_settings.activerehashing is defined %} 241 | activerehashing {{ redis_settings.activerehashing }} 242 | {%- else %} 243 | activerehashing yes 244 | {%- endif %} 245 | {%- if redis_settings.client_output_buffer_limit is defined %} 246 | {%- for class,options in redis_settings.client_output_buffer_limit.items() %} 247 | client-output-buffer-limit {{ class }} {{ options }} 248 | {%- endfor %} 249 | {%- else %} 250 | client-output-buffer-limit normal 0 0 0 251 | client-output-buffer-limit slave 256mb 64mb 60 252 | client-output-buffer-limit pubsub 32mb 8mb 60 253 | {%- endif %} 254 | {%- if redis_settings.hz is defined %} 255 | hz {{ redis_settings.hz }} 256 | {%- else %} 257 | hz 10 258 | {%- endif %} 259 | {%- if redis_settings.aof_rewrite_incremental_fsync is defined %} 260 | aof-rewrite-incremental-fsync {{ redis_settings.aof_rewrite_incremental_fsync }} 261 | {%- else %} 262 | aof-rewrite-incremental-fsync yes 263 | {%- endif %} 264 | 265 | {%- if redis_settings['protected-mode'] is defined %} 266 | protected-mode {{ redis_settings['protected-mode'] }} 267 | {%- else %} 268 | protected-mode yes 269 | {%- endif %} 270 | 271 | -------------------------------------------------------------------------------- /kitchen.yml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | # For help on this file's format, see https://kitchen.ci/ 5 | driver: 6 | name: docker 7 | use_sudo: false 8 | privileged: true 9 | run_command: /usr/lib/systemd/systemd 10 | 11 | provisioner: 12 | name: salt_solo 13 | log_level: debug 14 | salt_install: none 15 | require_chef: false 16 | formula: redis 17 | salt_copy_filter: 18 | - .kitchen 19 | - .git 20 | 21 | platforms: 22 | ## SALT `tiamat` 23 | - name: debian-11-tiamat-py3 24 | driver: 25 | image: saltimages/salt-tiamat-py3:debian-11 26 | run_command: /lib/systemd/systemd 27 | - name: debian-10-tiamat-py3 28 | driver: 29 | image: saltimages/salt-tiamat-py3:debian-10 30 | run_command: /lib/systemd/systemd 31 | - name: debian-9-tiamat-py3 32 | driver: 33 | image: saltimages/salt-tiamat-py3:debian-9 34 | run_command: /lib/systemd/systemd 35 | - name: ubuntu-2204-tiamat-py3 36 | driver: 37 | image: saltimages/salt-tiamat-py3:ubuntu-22.04 38 | run_command: /lib/systemd/systemd 39 | - name: ubuntu-2004-tiamat-py3 40 | driver: 41 | image: saltimages/salt-tiamat-py3:ubuntu-20.04 42 | run_command: /lib/systemd/systemd 43 | - name: ubuntu-1804-tiamat-py3 44 | driver: 45 | image: saltimages/salt-tiamat-py3:ubuntu-18.04 46 | run_command: /lib/systemd/systemd 47 | - name: centos-stream8-tiamat-py3 48 | driver: 49 | image: saltimages/salt-tiamat-py3:centos-stream8 50 | - name: centos-7-tiamat-py3 51 | driver: 52 | image: saltimages/salt-tiamat-py3:centos-7 53 | - name: amazonlinux-2-tiamat-py3 54 | driver: 55 | image: saltimages/salt-tiamat-py3:amazonlinux-2 56 | - name: oraclelinux-8-tiamat-py3 57 | driver: 58 | image: saltimages/salt-tiamat-py3:oraclelinux-8 59 | - name: oraclelinux-7-tiamat-py3 60 | driver: 61 | image: saltimages/salt-tiamat-py3:oraclelinux-7 62 | - name: almalinux-8-tiamat-py3 63 | driver: 64 | image: saltimages/salt-tiamat-py3:almalinux-8 65 | - name: rockylinux-8-tiamat-py3 66 | driver: 67 | image: saltimages/salt-tiamat-py3:rockylinux-8 68 | 69 | ## SALT `master` 70 | - name: debian-11-master-py3 71 | driver: 72 | image: saltimages/salt-master-py3:debian-11 73 | run_command: /lib/systemd/systemd 74 | - name: debian-10-master-py3 75 | driver: 76 | image: saltimages/salt-master-py3:debian-10 77 | run_command: /lib/systemd/systemd 78 | - name: debian-9-master-py3 79 | driver: 80 | image: saltimages/salt-master-py3:debian-9 81 | run_command: /lib/systemd/systemd 82 | - name: ubuntu-2204-master-py3 83 | driver: 84 | image: saltimages/salt-master-py3:ubuntu-22.04 85 | run_command: /lib/systemd/systemd 86 | - name: ubuntu-2004-master-py3 87 | driver: 88 | image: saltimages/salt-master-py3:ubuntu-20.04 89 | run_command: /lib/systemd/systemd 90 | - name: ubuntu-1804-master-py3 91 | driver: 92 | image: saltimages/salt-master-py3:ubuntu-18.04 93 | run_command: /lib/systemd/systemd 94 | - name: centos-stream8-master-py3 95 | driver: 96 | image: saltimages/salt-master-py3:centos-stream8 97 | - name: centos-7-master-py3 98 | driver: 99 | image: saltimages/salt-master-py3:centos-7 100 | - name: fedora-36-master-py3 101 | driver: 102 | image: saltimages/salt-master-py3:fedora-36 103 | - name: fedora-35-master-py3 104 | driver: 105 | image: saltimages/salt-master-py3:fedora-35 106 | - name: opensuse-leap-153-master-py3 107 | driver: 108 | image: saltimages/salt-master-py3:opensuse-leap-15.3 109 | # Workaround to avoid intermittent failures on `opensuse-leap-15.3`: 110 | # => SCP did not finish successfully (255): (Net::SCP::Error) 111 | transport: 112 | max_ssh_sessions: 1 113 | - name: opensuse-tmbl-latest-master-py3 114 | driver: 115 | image: saltimages/salt-master-py3:opensuse-tumbleweed-latest 116 | # Workaround to avoid intermittent failures on `opensuse-tumbleweed`: 117 | # => SCP did not finish successfully (255): (Net::SCP::Error) 118 | transport: 119 | max_ssh_sessions: 1 120 | - name: amazonlinux-2-master-py3 121 | driver: 122 | image: saltimages/salt-master-py3:amazonlinux-2 123 | - name: oraclelinux-8-master-py3 124 | driver: 125 | image: saltimages/salt-master-py3:oraclelinux-8 126 | - name: oraclelinux-7-master-py3 127 | driver: 128 | image: saltimages/salt-master-py3:oraclelinux-7 129 | - name: arch-base-latest-master-py3 130 | driver: 131 | image: saltimages/salt-master-py3:arch-base-latest 132 | - name: gentoo-stage3-latest-master-py3 133 | driver: 134 | image: saltimages/salt-master-py3:gentoo-stage3-latest 135 | run_command: /sbin/init 136 | - name: gentoo-stage3-systemd-master-py3 137 | driver: 138 | image: saltimages/salt-master-py3:gentoo-stage3-systemd 139 | - name: almalinux-8-master-py3 140 | driver: 141 | image: saltimages/salt-master-py3:almalinux-8 142 | - name: rockylinux-8-master-py3 143 | driver: 144 | image: saltimages/salt-master-py3:rockylinux-8 145 | 146 | ## SALT `3004.1` 147 | - name: debian-11-3004-1-py3 148 | driver: 149 | image: saltimages/salt-3004.1-py3:debian-11 150 | run_command: /lib/systemd/systemd 151 | - name: debian-10-3004-1-py3 152 | driver: 153 | image: saltimages/salt-3004.1-py3:debian-10 154 | run_command: /lib/systemd/systemd 155 | - name: debian-9-3004-1-py3 156 | driver: 157 | image: saltimages/salt-3004.1-py3:debian-9 158 | run_command: /lib/systemd/systemd 159 | - name: ubuntu-2204-3004-1-py3 160 | driver: 161 | image: saltimages/salt-3004.1-py3:ubuntu-22.04 162 | run_command: /lib/systemd/systemd 163 | - name: ubuntu-2004-3004-1-py3 164 | driver: 165 | image: saltimages/salt-3004.1-py3:ubuntu-20.04 166 | run_command: /lib/systemd/systemd 167 | - name: ubuntu-1804-3004-1-py3 168 | driver: 169 | image: saltimages/salt-3004.1-py3:ubuntu-18.04 170 | run_command: /lib/systemd/systemd 171 | - name: centos-stream8-3004-1-py3 172 | driver: 173 | image: saltimages/salt-3004.1-py3:centos-stream8 174 | - name: centos-7-3004-1-py3 175 | driver: 176 | image: saltimages/salt-3004.1-py3:centos-7 177 | - name: fedora-36-3004-1-py3 178 | driver: 179 | image: saltimages/salt-3004.1-py3:fedora-36 180 | - name: fedora-35-3004-1-py3 181 | driver: 182 | image: saltimages/salt-3004.1-py3:fedora-35 183 | - name: amazonlinux-2-3004-1-py3 184 | driver: 185 | image: saltimages/salt-3004.1-py3:amazonlinux-2 186 | - name: oraclelinux-8-3004-1-py3 187 | driver: 188 | image: saltimages/salt-3004.1-py3:oraclelinux-8 189 | - name: oraclelinux-7-3004-1-py3 190 | driver: 191 | image: saltimages/salt-3004.1-py3:oraclelinux-7 192 | - name: arch-base-latest-3004-1-py3 193 | driver: 194 | image: saltimages/salt-3004.1-py3:arch-base-latest 195 | - name: gentoo-stage3-latest-3004-1-py3 196 | driver: 197 | image: saltimages/salt-3004.1-py3:gentoo-stage3-latest 198 | run_command: /sbin/init 199 | - name: gentoo-stage3-systemd-3004-1-py3 200 | driver: 201 | image: saltimages/salt-3004.1-py3:gentoo-stage3-systemd 202 | - name: almalinux-8-3004-1-py3 203 | driver: 204 | image: saltimages/salt-3004.1-py3:almalinux-8 205 | - name: rockylinux-8-3004-1-py3 206 | driver: 207 | image: saltimages/salt-3004.1-py3:rockylinux-8 208 | 209 | ## SALT `3004.0` 210 | - name: opensuse-leap-153-3004-0-py3 211 | driver: 212 | image: saltimages/salt-3004.0-py3:opensuse-leap-15.3 213 | # Workaround to avoid intermittent failures on `opensuse-leap-15.3`: 214 | # => SCP did not finish successfully (255): (Net::SCP::Error) 215 | transport: 216 | max_ssh_sessions: 1 217 | - name: opensuse-tmbl-latest-3004-0-py3 218 | driver: 219 | image: saltimages/salt-3004.0-py3:opensuse-tumbleweed-latest 220 | # Workaround to avoid intermittent failures on `opensuse-tumbleweed`: 221 | # => SCP did not finish successfully (255): (Net::SCP::Error) 222 | transport: 223 | max_ssh_sessions: 1 224 | 225 | ## SALT `3003.4` 226 | - name: debian-10-3003-4-py3 227 | driver: 228 | image: saltimages/salt-3003.4-py3:debian-10 229 | run_command: /lib/systemd/systemd 230 | - name: debian-9-3003-4-py3 231 | driver: 232 | image: saltimages/salt-3003.4-py3:debian-9 233 | run_command: /lib/systemd/systemd 234 | - name: ubuntu-2004-3003-4-py3 235 | driver: 236 | image: saltimages/salt-3003.4-py3:ubuntu-20.04 237 | run_command: /lib/systemd/systemd 238 | - name: ubuntu-1804-3003-4-py3 239 | driver: 240 | image: saltimages/salt-3003.4-py3:ubuntu-18.04 241 | run_command: /lib/systemd/systemd 242 | - name: centos-stream8-3003-4-py3 243 | driver: 244 | image: saltimages/salt-3003.4-py3:centos-stream8 245 | - name: centos-7-3003-4-py3 246 | driver: 247 | image: saltimages/salt-3003.4-py3:centos-7 248 | - name: amazonlinux-2-3003-4-py3 249 | driver: 250 | image: saltimages/salt-3003.4-py3:amazonlinux-2 251 | - name: oraclelinux-8-3003-4-py3 252 | driver: 253 | image: saltimages/salt-3003.4-py3:oraclelinux-8 254 | - name: oraclelinux-7-3003-4-py3 255 | driver: 256 | image: saltimages/salt-3003.4-py3:oraclelinux-7 257 | - name: almalinux-8-3003-4-py3 258 | driver: 259 | image: saltimages/salt-3003.4-py3:almalinux-8 260 | 261 | verifier: 262 | # https://www.inspec.io/ 263 | name: inspec 264 | sudo: true 265 | reporter: 266 | # cli, documentation, html, progress, json, json-min, json-rspec, junit 267 | - cli 268 | 269 | suites: 270 | - name: default 271 | provisioner: 272 | state_top: 273 | base: 274 | '*': 275 | - redis._mapdata 276 | - redis.common 277 | - redis.server 278 | pillars: 279 | top.sls: 280 | base: 281 | '*': 282 | - redis 283 | pillars_from_files: 284 | redis.sls: pillar.example 285 | verifier: 286 | inspec_tests: 287 | - path: test/integration/default 288 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | ############################################################################### 5 | # Define all YAML node anchors 6 | ############################################################################### 7 | .node_anchors: 8 | # `only` (also used for `except` where applicable) 9 | only_branch_master_parent_repo: &only_branch_master_parent_repo 10 | - 'master@saltstack-formulas/redis-formula' 11 | # `stage` 12 | stage_lint: &stage_lint 'lint' 13 | stage_release: &stage_release 'release' 14 | stage_test: &stage_test 'test' 15 | # `image` 16 | image_commitlint: &image_commitlint 'myii/ssf-commitlint:11' 17 | image_dindruby: &image_dindruby 'myii/ssf-dind-ruby:2.7.1-r3' 18 | image_precommit: &image_precommit 19 | name: 'myii/ssf-pre-commit:2.9.2' 20 | entrypoint: ['/bin/bash', '-c'] 21 | image_rubocop: &image_rubocop 'pipelinecomponents/rubocop:latest' 22 | image_semantic-release: &image_semanticrelease 'myii/ssf-semantic-release:15.14' 23 | # `services` 24 | services_docker_dind: &services_docker_dind 25 | - 'docker:dind' 26 | # `variables` 27 | # https://forum.gitlab.com/t/gitlab-com-ci-caching-rubygems/5627/3 28 | # https://bundler.io/v1.16/bundle_config.html 29 | variables_bundler: &variables_bundler 30 | BUNDLE_CACHE_PATH: '${CI_PROJECT_DIR}/.cache/bundler' 31 | BUNDLE_WITHOUT: 'production' 32 | # `cache` 33 | cache_bundler: &cache_bundler 34 | key: '${CI_JOB_STAGE}' 35 | paths: 36 | - '${BUNDLE_CACHE_PATH}' 37 | 38 | ############################################################################### 39 | # Define stages and global variables 40 | ############################################################################### 41 | stages: 42 | - *stage_lint 43 | - *stage_test 44 | - *stage_release 45 | variables: 46 | DOCKER_DRIVER: 'overlay2' 47 | 48 | ############################################################################### 49 | # `lint` stage: `commitlint`, `pre-commit` & `rubocop` (latest, failure allowed) 50 | ############################################################################### 51 | commitlint: 52 | stage: *stage_lint 53 | image: *image_commitlint 54 | script: 55 | # Add `upstream` remote to get access to `upstream/master` 56 | - 'git remote add upstream 57 | https://gitlab.com/saltstack-formulas/redis-formula.git' 58 | - 'git fetch --all' 59 | # Set default commit hashes for `--from` and `--to` 60 | - 'export COMMITLINT_FROM="$(git merge-base upstream/master HEAD)"' 61 | - 'export COMMITLINT_TO="${CI_COMMIT_SHA}"' 62 | # `coqbot` adds a merge commit to test PRs on top of the latest commit in 63 | # the repo; amend this merge commit message to avoid failure 64 | - | 65 | if [ "${GITLAB_USER_LOGIN}" = "coqbot" ] \ 66 | && [ "${CI_COMMIT_BRANCH}" != "master" ]; then 67 | git commit --amend -m \ 68 | 'chore: reword coqbot merge commit message for commitlint' 69 | export COMMITLINT_TO=HEAD 70 | fi 71 | # Run `commitlint` 72 | - 'commitlint --from "${COMMITLINT_FROM}" 73 | --to "${COMMITLINT_TO}" 74 | --verbose' 75 | 76 | pre-commit: 77 | stage: *stage_lint 78 | image: *image_precommit 79 | # https://pre-commit.com/#gitlab-ci-example 80 | variables: 81 | PRE_COMMIT_HOME: '${CI_PROJECT_DIR}/.cache/pre-commit' 82 | cache: 83 | key: '${CI_JOB_NAME}' 84 | paths: 85 | - '${PRE_COMMIT_HOME}' 86 | script: 87 | - 'pre-commit run --all-files --color always --verbose' 88 | 89 | # Use a separate job for `rubocop` other than the one potentially run by `pre-commit` 90 | # - The `pre-commit` check will only be available for formulas that pass the default 91 | # `rubocop` check -- and must continue to do so 92 | # - This job is allowed to fail, so can be used for all formulas 93 | # - Furthermore, this job uses all of the latest `rubocop` features & cops, 94 | # which will help when upgrading the `rubocop` linter used in `pre-commit` 95 | rubocop: 96 | allow_failure: true 97 | stage: *stage_lint 98 | image: *image_rubocop 99 | script: 100 | - 'rubocop -d -P -S --enable-pending-cops' 101 | 102 | ############################################################################### 103 | # Define `test` template 104 | ############################################################################### 105 | .test_instance: &test_instance 106 | stage: *stage_test 107 | image: *image_dindruby 108 | services: *services_docker_dind 109 | variables: *variables_bundler 110 | cache: *cache_bundler 111 | before_script: 112 | # TODO: This should work from the env vars above automatically 113 | - 'bundle config set path "${BUNDLE_CACHE_PATH}"' 114 | - 'bundle config set without "${BUNDLE_WITHOUT}"' 115 | - 'bundle install' 116 | script: 117 | # Alternative value to consider: `${CI_JOB_NAME}` 118 | - 'bin/kitchen verify "${DOCKER_ENV_CI_JOB_NAME}"' 119 | 120 | ############################################################################### 121 | # Define `test` template (`allow_failure: true`) 122 | ############################################################################### 123 | .test_instance_failure_permitted: 124 | <<: *test_instance 125 | allow_failure: true 126 | 127 | ############################################################################### 128 | # `test` stage: each instance below uses the `test` template above 129 | ############################################################################### 130 | ## Define the rest of the matrix based on Kitchen testing 131 | # Make sure the instances listed below match up with 132 | # the `platforms` defined in `kitchen.yml` 133 | # yamllint disable rule:line-length 134 | # default-debian-11-tiamat-py3: {extends: '.test_instance'} 135 | # default-debian-10-tiamat-py3: {extends: '.test_instance'} 136 | # default-debian-9-tiamat-py3: {extends: '.test_instance'} 137 | # default-ubuntu-2204-tiamat-py3: {extends: '.test_instance_failure_permitted'} 138 | # default-ubuntu-2004-tiamat-py3: {extends: '.test_instance'} 139 | # default-ubuntu-1804-tiamat-py3: {extends: '.test_instance'} 140 | # default-centos-stream8-tiamat-py3: {extends: '.test_instance_failure_permitted'} 141 | # default-centos-7-tiamat-py3: {extends: '.test_instance'} 142 | # default-amazonlinux-2-tiamat-py3: {extends: '.test_instance'} 143 | # default-oraclelinux-8-tiamat-py3: {extends: '.test_instance'} 144 | # default-oraclelinux-7-tiamat-py3: {extends: '.test_instance'} 145 | # default-almalinux-8-tiamat-py3: {extends: '.test_instance'} 146 | # default-rockylinux-8-tiamat-py3: {extends: '.test_instance'} 147 | default-debian-11-master-py3: {extends: '.test_instance'} 148 | default-debian-10-master-py3: {extends: '.test_instance'} 149 | default-debian-9-master-py3: {extends: '.test_instance'} 150 | default-ubuntu-2204-master-py3: {extends: '.test_instance_failure_permitted'} 151 | default-ubuntu-2004-master-py3: {extends: '.test_instance'} 152 | default-ubuntu-1804-master-py3: {extends: '.test_instance'} 153 | default-centos-stream8-master-py3: {extends: '.test_instance_failure_permitted'} 154 | default-centos-7-master-py3: {extends: '.test_instance'} 155 | default-fedora-36-master-py3: {extends: '.test_instance_failure_permitted'} 156 | default-fedora-35-master-py3: {extends: '.test_instance'} 157 | default-opensuse-leap-153-master-py3: {extends: '.test_instance'} 158 | default-opensuse-tmbl-latest-master-py3: {extends: '.test_instance_failure_permitted'} 159 | default-amazonlinux-2-master-py3: {extends: '.test_instance'} 160 | default-oraclelinux-8-master-py3: {extends: '.test_instance'} 161 | default-oraclelinux-7-master-py3: {extends: '.test_instance'} 162 | default-arch-base-latest-master-py3: {extends: '.test_instance'} 163 | # default-gentoo-stage3-latest-master-py3: {extends: '.test_instance'} 164 | # default-gentoo-stage3-systemd-master-py3: {extends: '.test_instance'} 165 | default-almalinux-8-master-py3: {extends: '.test_instance'} 166 | default-rockylinux-8-master-py3: {extends: '.test_instance'} 167 | # default-debian-11-3004-1-py3: {extends: '.test_instance'} 168 | # default-debian-10-3004-1-py3: {extends: '.test_instance'} 169 | # default-debian-9-3004-1-py3: {extends: '.test_instance'} 170 | # default-ubuntu-2204-3004-1-py3: {extends: '.test_instance_failure_permitted'} 171 | # default-ubuntu-2004-3004-1-py3: {extends: '.test_instance'} 172 | # default-ubuntu-1804-3004-1-py3: {extends: '.test_instance'} 173 | # default-centos-stream8-3004-1-py3: {extends: '.test_instance_failure_permitted'} 174 | # default-centos-7-3004-1-py3: {extends: '.test_instance'} 175 | # default-fedora-36-3004-1-py3: {extends: '.test_instance_failure_permitted'} 176 | # default-fedora-35-3004-1-py3: {extends: '.test_instance'} 177 | # default-amazonlinux-2-3004-1-py3: {extends: '.test_instance'} 178 | # default-oraclelinux-8-3004-1-py3: {extends: '.test_instance'} 179 | # default-oraclelinux-7-3004-1-py3: {extends: '.test_instance'} 180 | # default-arch-base-latest-3004-1-py3: {extends: '.test_instance'} 181 | # default-gentoo-stage3-latest-3004-1-py3: {extends: '.test_instance'} 182 | # default-gentoo-stage3-systemd-3004-1-py3: {extends: '.test_instance'} 183 | # default-almalinux-8-3004-1-py3: {extends: '.test_instance'} 184 | # default-rockylinux-8-3004-1-py3: {extends: '.test_instance'} 185 | # default-opensuse-leap-153-3004-0-py3: {extends: '.test_instance'} 186 | # default-opensuse-tmbl-latest-3004-0-py3: {extends: '.test_instance_failure_permitted'} 187 | # default-debian-10-3003-4-py3: {extends: '.test_instance'} 188 | # default-debian-9-3003-4-py3: {extends: '.test_instance'} 189 | # default-ubuntu-2004-3003-4-py3: {extends: '.test_instance'} 190 | # default-ubuntu-1804-3003-4-py3: {extends: '.test_instance'} 191 | # default-centos-stream8-3003-4-py3: {extends: '.test_instance_failure_permitted'} 192 | # default-centos-7-3003-4-py3: {extends: '.test_instance'} 193 | # default-amazonlinux-2-3003-4-py3: {extends: '.test_instance'} 194 | # default-oraclelinux-8-3003-4-py3: {extends: '.test_instance'} 195 | # default-oraclelinux-7-3003-4-py3: {extends: '.test_instance'} 196 | # default-almalinux-8-3003-4-py3: {extends: '.test_instance'} 197 | # yamllint enable rule:line-length 198 | 199 | ############################################################################### 200 | # `release` stage: `semantic-release` 201 | ############################################################################### 202 | semantic-release: 203 | only: *only_branch_master_parent_repo 204 | stage: *stage_release 205 | image: *image_semanticrelease 206 | variables: 207 | MAINTAINER_TOKEN: '${GH_TOKEN}' 208 | script: 209 | # Update `AUTHORS.md` 210 | - '${HOME}/go/bin/maintainer contributor' 211 | # Run `semantic-release` 212 | - 'semantic-release' 213 | -------------------------------------------------------------------------------- /redis/files/redis-3.2-ng.conf.jinja: -------------------------------------------------------------------------------- 1 | # 2 | # This file is managed by salt. Do not edit by hand. 3 | # 4 | {% from "redis/map.jinja" import redis_settings with context %} 5 | ################################## INCLUDES ################################### 6 | {% if redis_settings.include is defined %} 7 | {%- for include in redis_settings.include %} 8 | include {{ include }} 9 | {%- endfor %} 10 | {%- endif %} 11 | 12 | ################################## NETWORK ##################################### 13 | {% if redis_settings.bind is defined %} 14 | bind {{ redis_settings.bind }} 15 | {%- endif %} 16 | {%- if redis_settings['protected-mode'] is defined %} 17 | protected-mode {{ redis_settings['protected-mode'] }} 18 | {%- else %} 19 | protected-mode yes 20 | {%- endif %} 21 | port {{ redis_settings.port }} 22 | {%- if redis_settings.tcp_backlog is defined and redis_settings.tcp_backlog > 0 %} 23 | tcp-backlog {{ redis_settings.tcp_backlog }} 24 | {%- endif %} 25 | {%- if redis_settings.unixsocket is defined %} 26 | unixsocket {{ redis_settings.unixsocket }} 27 | unixsocketperm {{ redis_settings.unixsocketperm }} 28 | {%- endif %} 29 | {%- if redis_settings.timeout is defined %} 30 | timeout {{ redis_settings.timeout }} 31 | {%- endif %} 32 | tcp-keepalive {{ redis_settings.tcp_keepalive }} 33 | 34 | ################################# GENERAL ##################################### 35 | {% if redis_settings.daemonize is defined %} 36 | daemonize {{ redis_settings.daemonize }} 37 | {%- else %} 38 | daemonize yes 39 | {%- endif %} 40 | {%- if redis_settings.supervised is defined %} 41 | supervised {{ redis_settings.supervised }} 42 | {%- else %} 43 | supervised no 44 | {%- endif %} 45 | pidfile {{ redis_settings.pidfile }} 46 | loglevel {{ redis_settings.loglevel }} 47 | {%- if redis_settings.syslog is defined %} 48 | syslog-enabled yes 49 | syslog-ident {{ redis_settings.syslog.ident }} 50 | syslog-facility {{ redis_settings.syslog.facility }} 51 | {%- if redis_settings.syslog.nologfile is defined %} 52 | logfile "" 53 | {%- else %} 54 | logfile {{ redis_settings.logfile }} 55 | {%- endif %} 56 | {%- else %} 57 | logfile {{ redis_settings.logfile }} 58 | {%- endif %} 59 | databases {{ redis_settings.database_count }} 60 | 61 | ################################ SNAPSHOTTING ################################ 62 | {% for s in redis_settings.snapshots %} 63 | save {{ s }} 64 | {%- endfor %} 65 | stop-writes-on-bgsave-error {{ redis_settings.stop_writes_on_bgsave_error }} 66 | rdbcompression {{ redis_settings.rdbcompression }} 67 | rdbchecksum {{ redis_settings.rdbchecksum }} 68 | dbfilename {{ redis_settings.dbfilename }} 69 | dir {{ redis_settings.root_dir }} 70 | 71 | ################################# REPLICATION ################################# 72 | {% if redis_settings.slaveof is defined %} 73 | slaveof {{ redis_settings.slaveof.masterip }} {{ redis_settings.slaveof.masterport }} 74 | {%- endif %} 75 | {%- if redis_settings.masterauth is defined %} 76 | masterauth {{ redis_settings.masterauth }} 77 | {%- endif %} 78 | slave-serve-stale-data {{ redis_settings.slave_serve_stale_data }} 79 | slave-read-only {{ redis_settings.slave_read_only }} 80 | {%- if redis_settings.repl_diskless_sync is defined %} 81 | repl-diskless-sync {{ redis_settings.repl_diskless_sync }} 82 | {%- endif %} 83 | {%- if redis_settings.repl_diskless_sync_delay is defined %} 84 | repl-diskless-sync-delay {{ redis_settings.repl_diskless_sync_delay }} 85 | {%- endif %} 86 | {%- if redis_settings.repl_ping_slave_period is defined %} 87 | repl-ping-slave-period {{ redis_settings.repl_ping_slave_period }} 88 | {%- endif %} 89 | {%- if redis_settings.repl_timeout is defined %} 90 | repl-timeout {{ redis_settings.repl_timeout }} 91 | {%- endif %} 92 | repl-disable-tcp-nodelay {{ redis_settings.repl_disable_tcp_nodelay }} 93 | {%- if redis_settings.repl_backlog_size is defined %} 94 | repl-backlog-size {{ redis_settings.repl_backlog_size }} 95 | {%- endif %} 96 | {%- if redis_settings.repl_backlog_ttl is defined %} 97 | repl-backlog-ttl {{ redis_settings.repl_backlog_ttl }} 98 | {%- endif %} 99 | slave-priority {{ redis_settings.slave_priority }} 100 | {%- if redis_settings.min_slaves_to_write is defined %} 101 | min-slaves-to-write {{ redis_settings.min_slaves_to_write }} 102 | {%- endif %} 103 | {%- if redis_settings.min_slaves_max_lag is defined %} 104 | min-slaves-max-lag {{ redis_settings.min_slaves_max_lag }} 105 | {%- endif %} 106 | {%- if redis_settings.slave_announce_ip is defined %} 107 | slave-announce-ip {{ redis_settings.slave_announce_ip }} 108 | {%- endif %} 109 | {%- if redis_settings.slave_announce_port is defined %} 110 | slave-announce-port {{ redis_settings.slave_announce_port }} 111 | {%- endif %} 112 | 113 | ################################## SECURITY ################################### 114 | {% if redis_settings.pass is defined %} 115 | requirepass {{ redis_settings.pass }} 116 | {%- endif %} 117 | {%- if redis_settings.rename_command is defined %} 118 | {%- for k, v in redis_settings.rename_command.items() %} 119 | rename-command {{ k }} {{ v }} 120 | {%- endfor %} 121 | {%- endif %} 122 | 123 | ################################### LIMITS #################################### 124 | {% if redis_settings.maxclients is defined %} 125 | maxclients {{ redis_settings.maxclients }} 126 | {%- endif %} 127 | {%- if redis_settings.maxmemory is defined %} 128 | maxmemory {{ redis_settings.maxmemory }} 129 | maxmemory-policy {{ redis_settings.maxmemory_policy }} 130 | maxmemory-samples {{ redis_settings.maxmemory_samples }} 131 | {%- endif %} 132 | 133 | ############################## APPEND ONLY MODE ############################### 134 | 135 | appendonly {{ redis_settings.appendonly }} 136 | appendfilename {{ redis_settings.appendfilename }} 137 | appendfsync {{ redis_settings.appendfsync }} 138 | no-appendfsync-on-rewrite {{ redis_settings.no_appendfsync_on_rewrite }} 139 | auto-aof-rewrite-percentage {{ redis_settings.auto_aof_rewrite_percentage }} 140 | auto-aof-rewrite-min-size {{ redis_settings.auto_aof_rewrite_min_size }} 141 | {%- if redis_settings.aof_load_truncated is defined %} 142 | aof-load-truncated {{ redis_settings.aof_load_truncated }} 143 | {%- endif %} 144 | 145 | ################################ LUA SCRIPTING ############################### 146 | 147 | lua-time-limit {{ redis_settings.lua_time_limit }} 148 | 149 | ################################ REDIS CLUSTER ############################### 150 | {% if redis_settings.cluster_enabled is defined %} 151 | cluster-enabled {{ redis_settings.cluster_enabled }} 152 | {%- endif %} 153 | {%- if redis_settings.cluster_config_file is defined %} 154 | cluster-config-file {{ redis_settings.cluster_config_file }} 155 | {%- endif %} 156 | {%- if redis_settings.cluster_node_timeout is defined %} 157 | cluster-node-timeout {{ redis_settings.cluster_node_timeout }} 158 | {%- endif %} 159 | {%- if redis_settings.cluster_slave_validity_factor is defined %} 160 | cluster-slave-validity-factor {{ redis_settings.cluster_slave_validity_factor }} 161 | {%- endif %} 162 | {%- if redis_settings.cluster_migration_barrier is defined %} 163 | cluster-migration-barrier {{ redis_settings.cluster_migration_barrier }} 164 | {%- endif %} 165 | {%- if redis_settings.cluster_require_full_coverage is defined %} 166 | cluster-require-full-coverage {{ redis_settings.cluster_require_full_coverage }} 167 | {%- endif %} 168 | 169 | 170 | ################################## SLOW LOG ################################### 171 | 172 | slowlog-log-slower-than {{ redis_settings.slowlog_log_slower_than }} 173 | slowlog-max-len {{ redis_settings.slowlog_max_len }} 174 | 175 | ################################ LATENCY MONITOR ############################## 176 | {% if redis_settings.latency_monitor_threshold is defined %} 177 | latency-monitor-threshold {{ redis_settings.latency_monitor_threshold }} 178 | {%- else %} 179 | latency-monitor-threshold 0 180 | {%- endif %} 181 | 182 | ############################# EVENT NOTIFICATION ############################## 183 | 184 | notify-keyspace-events {{ redis_settings.notify_keyspace_events }} 185 | 186 | ############################### ADVANCED CONFIG ############################### 187 | {% if redis_settings.hash_max_ziplist_entries is defined %} 188 | hash-max-ziplist-entries {{ redis_settings.hash_max_ziplist_entries }} 189 | {%- else %} 190 | hash-max-ziplist-entries 512 191 | {%- endif %} 192 | {%- if redis_settings.hash_max_ziplist_value is defined %} 193 | hash-max-ziplist-value {{ redis_settings.hash_max_ziplist_value }} 194 | {%- else %} 195 | hash-max-ziplist-value 64 196 | {%- endif %} 197 | {%- if redis_settings.list_max_ziplist_entries is defined %} 198 | list-max-ziplist-entries {{ redis_settings.list_max_ziplist_entries }} 199 | {%- else %} 200 | list-max-ziplist-entries 512 201 | {%- endif %} 202 | {%- if redis_settings.list_max_ziplist_value is defined %} 203 | list-max-ziplist-value {{ redis_settings.list_max_ziplist_value }} 204 | {%- else %} 205 | list-max-ziplist-value 64 206 | {%- endif %} 207 | {%- if redis_settings.list_max_ziplist_size is defined %} 208 | list-max-ziplist-size {{ redis_settings.list_max_ziplist_size }} 209 | {%- else %} 210 | list-max-ziplist-size -2 211 | {%- endif %} 212 | {%- if redis_settings.list_compress_depth is defined %} 213 | list-compress-depth {{ redis_settings.list_compress_depth }} 214 | {%- else %} 215 | list-compress-depth 0 216 | {%- endif %} 217 | {%- if redis_settings.set_max_intset_entries is defined %} 218 | set-max-intset-entries {{ redis_settings.set_max_intset_entries }} 219 | {%- else %} 220 | set-max-intset-entries 512 221 | {%- endif %} 222 | {%- if redis_settings.zset_max_ziplist_entries is defined %} 223 | zset-max-ziplist-entries {{ redis_settings.zset_max_ziplist_entries }} 224 | {%- else %} 225 | zset-max-ziplist-entries 128 226 | {%- endif %} 227 | {%- if redis_settings.zset_max_ziplist_value is defined %} 228 | zset-max-ziplist-value {{ redis_settings.zset_max_ziplist_value }} 229 | {%- else %} 230 | zset-max-ziplist-value 64 231 | {%- endif %} 232 | {%- if redis_settings.activerehashing is defined %} 233 | activerehashing {{ redis_settings.activerehashing }} 234 | {%- else %} 235 | activerehashing yes 236 | {%- endif %} 237 | {%- if redis_settings.client_output_buffer_limit is defined %} 238 | {%- for class,options in redis_settings.client_output_buffer_limit.items() %} 239 | client-output-buffer-limit {{ class }} {{ options }} 240 | {%- endfor %} 241 | {%- else %} 242 | client-output-buffer-limit normal 0 0 0 243 | client-output-buffer-limit slave 256mb 64mb 60 244 | client-output-buffer-limit pubsub 32mb 8mb 60 245 | {%- endif %} 246 | {%- if redis_settings.hz is defined %} 247 | hz {{ redis_settings.hz }} 248 | {%- else %} 249 | hz 10 250 | {%- endif %} 251 | {%- if redis_settings.aof_rewrite_incremental_fsync is defined %} 252 | aof-rewrite-incremental-fsync {{ redis_settings.aof_rewrite_incremental_fsync }} 253 | {%- else %} 254 | aof-rewrite-incremental-fsync yes 255 | {%- endif %} 256 | 257 | {%- if redis_settings.extra_opts is defined %} 258 | ################################ EXTRA OPTIONS ############################### 259 | {% for option,value in redis_settings.extra_opts.items() %} 260 | {{ option }} {{ value }} 261 | {%- endfor %} 262 | {%- endif %} 263 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## [0.28.1](https://github.com/saltstack-formulas/redis-formula/compare/v0.28.0...v0.28.1) (2022-02-12) 4 | 5 | 6 | ### Code Refactoring 7 | 8 | * **salt-lint:** fix violations ([eef0cf1](https://github.com/saltstack-formulas/redis-formula/commit/eef0cf1b6e982ab530469b0418a63231687d70ed)) 9 | 10 | 11 | ### Continuous Integration 12 | 13 | * update linters to latest versions [skip ci] ([45e625e](https://github.com/saltstack-formulas/redis-formula/commit/45e625e8f332b301baf84c1b7e988ae7f40f80eb)) 14 | * **3003.1:** update inc. AlmaLinux, Rocky & `rst-lint` [skip ci] ([fea9e42](https://github.com/saltstack-formulas/redis-formula/commit/fea9e42f3ef7141763f49459f92d3f43a192fa80)) 15 | * **gemfile:** allow rubygems proxy to be provided as an env var [skip ci] ([a458500](https://github.com/saltstack-formulas/redis-formula/commit/a458500d99a786c78d8a93690429ec4c850d797b)) 16 | * **gemfile+lock:** use `ssf` customised `inspec` repo [skip ci] ([d272d1a](https://github.com/saltstack-formulas/redis-formula/commit/d272d1a2c1b9139c17797ad711ff1edc7f57b7cb)) 17 | * **kitchen:** move `provisioner` block & update `run_command` [skip ci] ([6b0f151](https://github.com/saltstack-formulas/redis-formula/commit/6b0f15127b8e5df3afef7310d1a0c44e3f019c62)) 18 | * **kitchen+ci:** update with `3004` pre-salted images/boxes [skip ci] ([c16bbca](https://github.com/saltstack-formulas/redis-formula/commit/c16bbca6dce3d36a46fcfb4a72868dad6ed827d5)) 19 | * **kitchen+ci:** update with latest `3003.2` pre-salted images [skip ci] ([3a6f8c2](https://github.com/saltstack-formulas/redis-formula/commit/3a6f8c263fdc95b909e85d097041817848dcbd0a)) 20 | * **kitchen+ci:** update with latest CVE pre-salted images [skip ci] ([c0eae92](https://github.com/saltstack-formulas/redis-formula/commit/c0eae926d7870fc6078c0cbdad809e322a4c29ba)) 21 | * **kitchen+gitlab:** update for new pre-salted images [skip ci] ([25fc44b](https://github.com/saltstack-formulas/redis-formula/commit/25fc44ba67d8d2c3c8e216eb1569f5e131b5de47)) 22 | * add Debian 11 Bullseye & update `yamllint` configuration [skip ci] ([c6fe7cb](https://github.com/saltstack-formulas/redis-formula/commit/c6fe7cbdabfaf2ee0be91e45dd4d0e1816b3cf3d)) 23 | 24 | # [0.28.0](https://github.com/saltstack-formulas/redis-formula/compare/v0.27.2...v0.28.0) (2021-06-24) 25 | 26 | 27 | ### Bug Fixes 28 | 29 | * **archlinux:** systemd requires type=simple ([908bf60](https://github.com/saltstack-formulas/redis-formula/commit/908bf609a74ae6eab79b878bdd15ca0fc8294e27)) 30 | * **defaults:** use lhs lib dir ([7a7cc4a](https://github.com/saltstack-formulas/redis-formula/commit/7a7cc4afba7510beab152bfec0ea7e389193138e)) 31 | 32 | 33 | ### Continuous Integration 34 | 35 | * **gitlab-ci:** enable Arch Linux [skip ci] ([8a8a71d](https://github.com/saltstack-formulas/redis-formula/commit/8a8a71dc9bcfb918edbe28c16f40cfc3e1e3d6ef)) 36 | * **kitchen+gitlab:** adjust matrix to add `3003` [skip ci] ([ea7db6d](https://github.com/saltstack-formulas/redis-formula/commit/ea7db6dbb2a290cdcc0df324bec2a71bef02a62f)) 37 | * **kitchen+gitlab:** remove Ubuntu 16.04 & Fedora 32 (EOL) [skip ci] ([3b5d2f7](https://github.com/saltstack-formulas/redis-formula/commit/3b5d2f74d2ed88dd8d26a21ad55c69cba8885d3b)) 38 | * add `arch-master` to matrix and update `.travis.yml` [skip ci] ([71d420f](https://github.com/saltstack-formulas/redis-formula/commit/71d420f5103794df2bd9282fb13d13b9674d6c5c)) 39 | 40 | 41 | ### Features 42 | 43 | * **arch:** add support for archlinux ([02c1d2f](https://github.com/saltstack-formulas/redis-formula/commit/02c1d2f48ba7a6ac9b19f1799bd662fe2739487b)) 44 | 45 | ## [0.27.2](https://github.com/saltstack-formulas/redis-formula/compare/v0.27.1...v0.27.2) (2021-04-02) 46 | 47 | 48 | ### Bug Fixes 49 | 50 | * **debian:** install/configure sentinel on stretch/buster ([cba4fbe](https://github.com/saltstack-formulas/redis-formula/commit/cba4fbe067627285cab8a2f7028ffdfd032dd045)) 51 | * **debian:** optimize code for deletion ([a4a5d3c](https://github.com/saltstack-formulas/redis-formula/commit/a4a5d3cf1639659822d657bc3137b5600ab2a2fd)) 52 | 53 | 54 | ### Continuous Integration 55 | 56 | * **kitchen+ci:** use latest pre-salted images (after CVE) [skip ci] ([4b3644c](https://github.com/saltstack-formulas/redis-formula/commit/4b3644ca8a966983ae2fa8da466c7c86a59355b4)) 57 | 58 | 59 | ### Tests 60 | 61 | * standardise use of `share` suite & `_mapdata` state [skip ci] ([de567a6](https://github.com/saltstack-formulas/redis-formula/commit/de567a6b49d84ac5fabb391dab642029c9540abe)) 62 | 63 | ## [0.27.1](https://github.com/saltstack-formulas/redis-formula/compare/v0.27.0...v0.27.1) (2021-03-04) 64 | 65 | 66 | ### Bug Fixes 67 | 68 | * **common:** add inline EPEL repo configuration for Amazon Linux 2 ([6b1c316](https://github.com/saltstack-formulas/redis-formula/commit/6b1c31613ffdf86776a54ab133935de04e47de95)) 69 | * **noise:** only change hugepage state if needed ([cd793f2](https://github.com/saltstack-formulas/redis-formula/commit/cd793f29f363bff95db2cb37ce3d371193eacc62)) 70 | * **suse:** fix for OpenSUSE Leap & Tumbleweed ([9ce0e7f](https://github.com/saltstack-formulas/redis-formula/commit/9ce0e7f780780ceada393250b3ecb6fdc45828a1)) 71 | 72 | 73 | ### Continuous Integration 74 | 75 | * **commitlint:** ensure `upstream/master` uses main repo URL [skip ci] ([c9bde0b](https://github.com/saltstack-formulas/redis-formula/commit/c9bde0b2907a785c12a46b3f733abf2b3d12a724)) 76 | * **gemfile+lock:** use `ssf` customised `kitchen-docker` repo [skip ci] ([05cb8a1](https://github.com/saltstack-formulas/redis-formula/commit/05cb8a1ed84cc84e505d8e5b5740795983318b17)) 77 | * **gitlab-ci:** add `rubocop` linter (with `allow_failure`) [skip ci] ([526d533](https://github.com/saltstack-formulas/redis-formula/commit/526d5338b1623dc7089722e562803862221fd12f)) 78 | * **kitchen+gitlab-ci:** use latest pre-salted images [skip ci] ([889c8f8](https://github.com/saltstack-formulas/redis-formula/commit/889c8f8adca2fdf0cbcf715f3d64ce527f8763b2)) 79 | * **pre-commit:** update hook for `rubocop` [skip ci] ([03bcbcf](https://github.com/saltstack-formulas/redis-formula/commit/03bcbcf3a9713852257376b43a4bc870f29fe151)) 80 | 81 | # [0.27.0](https://github.com/saltstack-formulas/redis-formula/compare/v0.26.2...v0.27.0) (2020-12-16) 82 | 83 | 84 | ### Bug Fixes 85 | 86 | * **defaults:** fix `yamllint` violation [skip ci] ([90093e2](https://github.com/saltstack-formulas/redis-formula/commit/90093e2592a039ca8ab382a88d5f0682dd70f6a8)) 87 | * **init:** convert to metastate; add clean state ([ca5f5aa](https://github.com/saltstack-formulas/redis-formula/commit/ca5f5aadbb33e2ebcda82595221232cdde12ba2a)) 88 | * **release.config.js:** use full commit hash in commit link [skip ci] ([9c0b42a](https://github.com/saltstack-formulas/redis-formula/commit/9c0b42a3b64768d0e75ed1e06cc9d4a4aed54036)) 89 | 90 | 91 | ### Code Refactoring 92 | 93 | * **server:** simplify install.sls ([f86a718](https://github.com/saltstack-formulas/redis-formula/commit/f86a718bddf7da40e7f57d5480160b78432cb7c8)) 94 | 95 | 96 | ### Continuous Integration 97 | 98 | * **gemfile:** restrict `train` gem version until upstream fix [skip ci] ([adff150](https://github.com/saltstack-formulas/redis-formula/commit/adff15056572fc3b3198d405e944032b0e55498b)) 99 | * **gemfile.lock:** add to repo with updated `Gemfile` [skip ci] ([e7f1305](https://github.com/saltstack-formulas/redis-formula/commit/e7f13054514241858b3e24da8c972c71262f1e46)) 100 | * **gitlab-ci:** use GitLab CI as Travis CI replacement ([38840b7](https://github.com/saltstack-formulas/redis-formula/commit/38840b7cbf4754faed3d8ebcc13fc26911043a40)) 101 | * **kitchen:** avoid using bootstrap for `master` instances [skip ci] ([7957381](https://github.com/saltstack-formulas/redis-formula/commit/7957381a36185ee1fda6dda86c037b7cdd59bbd1)) 102 | * **kitchen:** use `debian-10-master-py3` instead of `develop` [skip ci] ([e01a263](https://github.com/saltstack-formulas/redis-formula/commit/e01a263f3fc91c47e9d389987cdd0907bedf0996)) 103 | * **kitchen:** use `develop` image until `master` is ready (`amazonlinux`) [skip ci] ([769ec90](https://github.com/saltstack-formulas/redis-formula/commit/769ec907a94e66d53472a3f77d3ef132c42f289c)) 104 | * **kitchen:** use `saltimages` Docker Hub where available [skip ci] ([8bf0065](https://github.com/saltstack-formulas/redis-formula/commit/8bf0065b4f7ac57380aec2a5d61ec7b9d3f4bc9c)) 105 | * **kitchen+travis:** remove `master-py2-arch-base-latest` [skip ci] ([a0d6394](https://github.com/saltstack-formulas/redis-formula/commit/a0d63945ba9860f597e55829ae88a9b57b260bcc)) 106 | * **kitchen+travis:** upgrade matrix after `2019.2.2` release [skip ci] ([0d7108e](https://github.com/saltstack-formulas/redis-formula/commit/0d7108e0ef48b57a2900e0b52c6ce4eecca5e3f0)) 107 | * **pre-commit:** add to formula [skip ci] ([b48efa9](https://github.com/saltstack-formulas/redis-formula/commit/b48efa9fe371f433b3f4cf1fd8fc3e5f9770d33a)) 108 | * **pre-commit:** enable/disable `rstcheck` as relevant [skip ci] ([d180e9b](https://github.com/saltstack-formulas/redis-formula/commit/d180e9b40e9e7ae7d84605458be3e0ef428aed19)) 109 | * **pre-commit:** finalise `rstcheck` configuration [skip ci] ([13311ce](https://github.com/saltstack-formulas/redis-formula/commit/13311ced4ac193e58deb9e8a3a24b1390f75f5fb)) 110 | * **travis:** add notifications => zulip [skip ci] ([6e49f55](https://github.com/saltstack-formulas/redis-formula/commit/6e49f55c1ffd8e9f9cf31149c803f81da4271bb8)) 111 | * **travis:** apply changes from build config validation [skip ci] ([503fa20](https://github.com/saltstack-formulas/redis-formula/commit/503fa20cfbb17560c9e8c53786125dfa5dbf9d62)) 112 | * **travis:** opt-in to `dpl v2` to complete build config validation [skip ci] ([a3efd1f](https://github.com/saltstack-formulas/redis-formula/commit/a3efd1f94d38c1f238ddfaf357afb9e83bdf7369)) 113 | * **travis:** quote pathspecs used with `git ls-files` [skip ci] ([da71c9d](https://github.com/saltstack-formulas/redis-formula/commit/da71c9d60458079d71a775abbfaadf2a0ea99665)) 114 | * **travis:** run `shellcheck` during lint job [skip ci] ([e63b945](https://github.com/saltstack-formulas/redis-formula/commit/e63b945e615c7a35cf87f86d2885a1349814332a)) 115 | * **travis:** update `salt-lint` config for `v0.0.10` [skip ci] ([b317fec](https://github.com/saltstack-formulas/redis-formula/commit/b317fec818f243acd45d184e30ac34aa5313b37d)) 116 | * **travis:** use `major.minor` for `semantic-release` version [skip ci] ([fe02b53](https://github.com/saltstack-formulas/redis-formula/commit/fe02b53ebde0595a03fd6f3f4b77d0826f060363)) 117 | * **travis:** use build config validation (beta) [skip ci] ([a0ffb8a](https://github.com/saltstack-formulas/redis-formula/commit/a0ffb8adc0e4f31f5893e12ffc33120ec89c78f6)) 118 | * **workflows/commitlint:** add to repo [skip ci] ([b9b286b](https://github.com/saltstack-formulas/redis-formula/commit/b9b286b7efa71435f6804dbc351e1615e11f221a)) 119 | 120 | 121 | ### Documentation 122 | 123 | * **contributing:** remove to use org-level file instead [skip ci] ([a803116](https://github.com/saltstack-formulas/redis-formula/commit/a803116832161bfdf10085cc3788fbfdf5963b4d)) 124 | * **readme:** fix `rstcheck` violation & standardise [skip ci] ([ca32bfd](https://github.com/saltstack-formulas/redis-formula/commit/ca32bfdc1d2016deda4a074103d0bbea6b553a6a)) 125 | * **readme:** update link to `CONTRIBUTING` [skip ci] ([bd011b8](https://github.com/saltstack-formulas/redis-formula/commit/bd011b8e06017cd8c78a4a53a2a49889d6c7ab48)) 126 | 127 | 128 | ### Features 129 | 130 | * **suse:** basic opensuse support; tidyup ([f29f544](https://github.com/saltstack-formulas/redis-formula/commit/f29f544f6cbb87dbb3f568eae9f352cb75af1f90)) 131 | 132 | 133 | ### Performance Improvements 134 | 135 | * **travis:** improve `salt-lint` invocation [skip ci] ([186796b](https://github.com/saltstack-formulas/redis-formula/commit/186796b70d656b4c3c27d8934eccb92458f7ec02)) 136 | 137 | ## [0.26.2](https://github.com/saltstack-formulas/redis-formula/compare/v0.26.1...v0.26.2) (2019-10-11) 138 | 139 | 140 | ### Bug Fixes 141 | 142 | * **rubocop:** add fixes using `rubocop --safe-auto-correct` ([](https://github.com/saltstack-formulas/redis-formula/commit/5a9477e)) 143 | 144 | 145 | ### Continuous Integration 146 | 147 | * merge travis matrix, add `salt-lint` & `rubocop` to `lint` job ([](https://github.com/saltstack-formulas/redis-formula/commit/b105002)) 148 | * **travis:** merge `rubocop` linter into main `lint` job ([](https://github.com/saltstack-formulas/redis-formula/commit/f336c60)) 149 | 150 | ## [0.26.1](https://github.com/saltstack-formulas/redis-formula/compare/v0.26.0...v0.26.1) (2019-10-10) 151 | 152 | 153 | ### Bug Fixes 154 | 155 | * **common.sls:** fix `salt-lint` errors ([](https://github.com/saltstack-formulas/redis-formula/commit/a4c83ee)) 156 | * **redis-3.0.conf.jinja:** fix `salt-lint` errors ([](https://github.com/saltstack-formulas/redis-formula/commit/92ed1f8)) 157 | * **redis-sentinel_initd.jinja:** fix `salt-lint` errors ([](https://github.com/saltstack-formulas/redis-formula/commit/af83bca)) 158 | * **sentinel.sls:** fix `salt-lint` errors ([](https://github.com/saltstack-formulas/redis-formula/commit/37e677a)) 159 | * **server.sls:** fix `salt-lint` errors ([](https://github.com/saltstack-formulas/redis-formula/commit/4522782)) 160 | 161 | 162 | ### Continuous Integration 163 | 164 | * **kitchen:** change `log_level` to `debug` instead of `info` ([](https://github.com/saltstack-formulas/redis-formula/commit/bbf029d)) 165 | * **kitchen:** install required packages to bootstrapped `opensuse` [skip ci] ([](https://github.com/saltstack-formulas/redis-formula/commit/bee64cc)) 166 | * **kitchen:** use bootstrapped `opensuse` images until `2019.2.2` [skip ci] ([](https://github.com/saltstack-formulas/redis-formula/commit/65dd24e)) 167 | * **platform:** add `arch-base-latest` (commented out for now) [skip ci] ([](https://github.com/saltstack-formulas/redis-formula/commit/ba5aed7)) 168 | * merge travis matrix, add `salt-lint` & `rubocop` to `lint` job ([](https://github.com/saltstack-formulas/redis-formula/commit/af99ee6)) 169 | 170 | # [0.26.0](https://github.com/saltstack-formulas/redis-formula/compare/v0.25.2...v0.26.0) (2019-09-14) 171 | 172 | 173 | ### Features 174 | 175 | * **semantic-release:** implement for this formula ([4934355](https://github.com/saltstack-formulas/redis-formula/commit/4934355)) 176 | -------------------------------------------------------------------------------- /docs/CHANGELOG.rst: -------------------------------------------------------------------------------- 1 | 2 | Changelog 3 | ========= 4 | 5 | `0.28.1 `_ (2022-02-12) 6 | ---------------------------------------------------------------------------------------------------------- 7 | 8 | Code Refactoring 9 | ^^^^^^^^^^^^^^^^ 10 | 11 | 12 | * **salt-lint:** fix violations (\ `eef0cf1 `_\ ) 13 | 14 | Continuous Integration 15 | ^^^^^^^^^^^^^^^^^^^^^^ 16 | 17 | 18 | * update linters to latest versions [skip ci] (\ `45e625e `_\ ) 19 | * **3003.1:** update inc. AlmaLinux, Rocky & ``rst-lint`` [skip ci] (\ `fea9e42 `_\ ) 20 | * **gemfile:** allow rubygems proxy to be provided as an env var [skip ci] (\ `a458500 `_\ ) 21 | * **gemfile+lock:** use ``ssf`` customised ``inspec`` repo [skip ci] (\ `d272d1a `_\ ) 22 | * **kitchen:** move ``provisioner`` block & update ``run_command`` [skip ci] (\ `6b0f151 `_\ ) 23 | * **kitchen+ci:** update with ``3004`` pre-salted images/boxes [skip ci] (\ `c16bbca `_\ ) 24 | * **kitchen+ci:** update with latest ``3003.2`` pre-salted images [skip ci] (\ `3a6f8c2 `_\ ) 25 | * **kitchen+ci:** update with latest CVE pre-salted images [skip ci] (\ `c0eae92 `_\ ) 26 | * **kitchen+gitlab:** update for new pre-salted images [skip ci] (\ `25fc44b `_\ ) 27 | * add Debian 11 Bullseye & update ``yamllint`` configuration [skip ci] (\ `c6fe7cb `_\ ) 28 | 29 | `0.28.0 `_ (2021-06-24) 30 | ---------------------------------------------------------------------------------------------------------- 31 | 32 | Bug Fixes 33 | ^^^^^^^^^ 34 | 35 | 36 | * **archlinux:** systemd requires type=simple (\ `908bf60 `_\ ) 37 | * **defaults:** use lhs lib dir (\ `7a7cc4a `_\ ) 38 | 39 | Continuous Integration 40 | ^^^^^^^^^^^^^^^^^^^^^^ 41 | 42 | 43 | * **gitlab-ci:** enable Arch Linux [skip ci] (\ `8a8a71d `_\ ) 44 | * **kitchen+gitlab:** adjust matrix to add ``3003`` [skip ci] (\ `ea7db6d `_\ ) 45 | * **kitchen+gitlab:** remove Ubuntu 16.04 & Fedora 32 (EOL) [skip ci] (\ `3b5d2f7 `_\ ) 46 | * add ``arch-master`` to matrix and update ``.travis.yml`` [skip ci] (\ `71d420f `_\ ) 47 | 48 | Features 49 | ^^^^^^^^ 50 | 51 | 52 | * **arch:** add support for archlinux (\ `02c1d2f `_\ ) 53 | 54 | `0.27.2 `_ (2021-04-02) 55 | ---------------------------------------------------------------------------------------------------------- 56 | 57 | Bug Fixes 58 | ^^^^^^^^^ 59 | 60 | 61 | * **debian:** install/configure sentinel on stretch/buster (\ `cba4fbe `_\ ) 62 | * **debian:** optimize code for deletion (\ `a4a5d3c `_\ ) 63 | 64 | Continuous Integration 65 | ^^^^^^^^^^^^^^^^^^^^^^ 66 | 67 | 68 | * **kitchen+ci:** use latest pre-salted images (after CVE) [skip ci] (\ `4b3644c `_\ ) 69 | 70 | Tests 71 | ^^^^^ 72 | 73 | 74 | * standardise use of ``share`` suite & ``_mapdata`` state [skip ci] (\ `de567a6 `_\ ) 75 | 76 | `0.27.1 `_ (2021-03-04) 77 | ---------------------------------------------------------------------------------------------------------- 78 | 79 | Bug Fixes 80 | ^^^^^^^^^ 81 | 82 | 83 | * **common:** add inline EPEL repo configuration for Amazon Linux 2 (\ `6b1c316 `_\ ) 84 | * **noise:** only change hugepage state if needed (\ `cd793f2 `_\ ) 85 | * **suse:** fix for OpenSUSE Leap & Tumbleweed (\ `9ce0e7f `_\ ) 86 | 87 | Continuous Integration 88 | ^^^^^^^^^^^^^^^^^^^^^^ 89 | 90 | 91 | * **commitlint:** ensure ``upstream/master`` uses main repo URL [skip ci] (\ `c9bde0b `_\ ) 92 | * **gemfile+lock:** use ``ssf`` customised ``kitchen-docker`` repo [skip ci] (\ `05cb8a1 `_\ ) 93 | * **gitlab-ci:** add ``rubocop`` linter (with ``allow_failure``\ ) [skip ci] (\ `526d533 `_\ ) 94 | * **kitchen+gitlab-ci:** use latest pre-salted images [skip ci] (\ `889c8f8 `_\ ) 95 | * **pre-commit:** update hook for ``rubocop`` [skip ci] (\ `03bcbcf `_\ ) 96 | 97 | `0.27.0 `_ (2020-12-16) 98 | ---------------------------------------------------------------------------------------------------------- 99 | 100 | Bug Fixes 101 | ^^^^^^^^^ 102 | 103 | 104 | * **defaults:** fix ``yamllint`` violation [skip ci] (\ `90093e2 `_\ ) 105 | * **init:** convert to metastate; add clean state (\ `ca5f5aa `_\ ) 106 | * **release.config.js:** use full commit hash in commit link [skip ci] (\ `9c0b42a `_\ ) 107 | 108 | Code Refactoring 109 | ^^^^^^^^^^^^^^^^ 110 | 111 | 112 | * **server:** simplify install.sls (\ `f86a718 `_\ ) 113 | 114 | Continuous Integration 115 | ^^^^^^^^^^^^^^^^^^^^^^ 116 | 117 | 118 | * **gemfile:** restrict ``train`` gem version until upstream fix [skip ci] (\ `adff150 `_\ ) 119 | * **gemfile.lock:** add to repo with updated ``Gemfile`` [skip ci] (\ `e7f1305 `_\ ) 120 | * **gitlab-ci:** use GitLab CI as Travis CI replacement (\ `38840b7 `_\ ) 121 | * **kitchen:** avoid using bootstrap for ``master`` instances [skip ci] (\ `7957381 `_\ ) 122 | * **kitchen:** use ``debian-10-master-py3`` instead of ``develop`` [skip ci] (\ `e01a263 `_\ ) 123 | * **kitchen:** use ``develop`` image until ``master`` is ready (\ ``amazonlinux``\ ) [skip ci] (\ `769ec90 `_\ ) 124 | * **kitchen:** use ``saltimages`` Docker Hub where available [skip ci] (\ `8bf0065 `_\ ) 125 | * **kitchen+travis:** remove ``master-py2-arch-base-latest`` [skip ci] (\ `a0d6394 `_\ ) 126 | * **kitchen+travis:** upgrade matrix after ``2019.2.2`` release [skip ci] (\ `0d7108e `_\ ) 127 | * **pre-commit:** add to formula [skip ci] (\ `b48efa9 `_\ ) 128 | * **pre-commit:** enable/disable ``rstcheck`` as relevant [skip ci] (\ `d180e9b `_\ ) 129 | * **pre-commit:** finalise ``rstcheck`` configuration [skip ci] (\ `13311ce `_\ ) 130 | * **travis:** add notifications => zulip [skip ci] (\ `6e49f55 `_\ ) 131 | * **travis:** apply changes from build config validation [skip ci] (\ `503fa20 `_\ ) 132 | * **travis:** opt-in to ``dpl v2`` to complete build config validation [skip ci] (\ `a3efd1f `_\ ) 133 | * **travis:** quote pathspecs used with ``git ls-files`` [skip ci] (\ `da71c9d `_\ ) 134 | * **travis:** run ``shellcheck`` during lint job [skip ci] (\ `e63b945 `_\ ) 135 | * **travis:** update ``salt-lint`` config for ``v0.0.10`` [skip ci] (\ `b317fec `_\ ) 136 | * **travis:** use ``major.minor`` for ``semantic-release`` version [skip ci] (\ `fe02b53 `_\ ) 137 | * **travis:** use build config validation (beta) [skip ci] (\ `a0ffb8a `_\ ) 138 | * **workflows/commitlint:** add to repo [skip ci] (\ `b9b286b `_\ ) 139 | 140 | Documentation 141 | ^^^^^^^^^^^^^ 142 | 143 | 144 | * **contributing:** remove to use org-level file instead [skip ci] (\ `a803116 `_\ ) 145 | * **readme:** fix ``rstcheck`` violation & standardise [skip ci] (\ `ca32bfd `_\ ) 146 | * **readme:** update link to ``CONTRIBUTING`` [skip ci] (\ `bd011b8 `_\ ) 147 | 148 | Features 149 | ^^^^^^^^ 150 | 151 | 152 | * **suse:** basic opensuse support; tidyup (\ `f29f544 `_\ ) 153 | 154 | Performance Improvements 155 | ^^^^^^^^^^^^^^^^^^^^^^^^ 156 | 157 | 158 | * **travis:** improve ``salt-lint`` invocation [skip ci] (\ `186796b `_\ ) 159 | 160 | `0.26.2 `_ (2019-10-11) 161 | ---------------------------------------------------------------------------------------------------------- 162 | 163 | Bug Fixes 164 | ^^^^^^^^^ 165 | 166 | 167 | * **rubocop:** add fixes using ``rubocop --safe-auto-correct`` (\ ` `_\ ) 168 | 169 | Continuous Integration 170 | ^^^^^^^^^^^^^^^^^^^^^^ 171 | 172 | 173 | * merge travis matrix, add ``salt-lint`` & ``rubocop`` to ``lint`` job (\ ` `_\ ) 174 | * **travis:** merge ``rubocop`` linter into main ``lint`` job (\ ` `_\ ) 175 | 176 | `0.26.1 `_ (2019-10-10) 177 | ---------------------------------------------------------------------------------------------------------- 178 | 179 | Bug Fixes 180 | ^^^^^^^^^ 181 | 182 | 183 | * **common.sls:** fix ``salt-lint`` errors (\ ` `_\ ) 184 | * **redis-3.0.conf.jinja:** fix ``salt-lint`` errors (\ ` `_\ ) 185 | * **redis-sentinel_initd.jinja:** fix ``salt-lint`` errors (\ ` `_\ ) 186 | * **sentinel.sls:** fix ``salt-lint`` errors (\ ` `_\ ) 187 | * **server.sls:** fix ``salt-lint`` errors (\ ` `_\ ) 188 | 189 | Continuous Integration 190 | ^^^^^^^^^^^^^^^^^^^^^^ 191 | 192 | 193 | * **kitchen:** change ``log_level`` to ``debug`` instead of ``info`` (\ ` `_\ ) 194 | * **kitchen:** install required packages to bootstrapped ``opensuse`` [skip ci] (\ ` `_\ ) 195 | * **kitchen:** use bootstrapped ``opensuse`` images until ``2019.2.2`` [skip ci] (\ ` `_\ ) 196 | * **platform:** add ``arch-base-latest`` (commented out for now) [skip ci] (\ ` `_\ ) 197 | * merge travis matrix, add ``salt-lint`` & ``rubocop`` to ``lint`` job (\ ` `_\ ) 198 | 199 | `0.26.0 `_ (2019-09-14) 200 | ---------------------------------------------------------------------------------------------------------- 201 | 202 | Features 203 | ^^^^^^^^ 204 | 205 | 206 | * **semantic-release:** implement for this formula (\ `4934355 `_\ ) 207 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GIT 2 | remote: https://gitlab.com/saltstack-formulas/infrastructure/inspec 3 | revision: aaef842906a5666f0fc0b4f186b4dd3498f5b28c 4 | branch: ssf 5 | specs: 6 | inspec (5.18.15) 7 | cookstyle 8 | faraday_middleware (>= 0.12.2, < 1.1) 9 | inspec-core (= 5.18.15) 10 | mongo (= 2.13.2) 11 | progress_bar (~> 1.3.3) 12 | rake 13 | train (~> 3.10) 14 | train-aws (~> 0.2) 15 | train-habitat (~> 0.1) 16 | train-winrm (~> 0.2) 17 | inspec-core (5.18.15) 18 | addressable (~> 2.4) 19 | chef-telemetry (~> 1.0, >= 1.0.8) 20 | faraday (>= 0.9.0, < 1.5) 21 | faraday_middleware (~> 1.0) 22 | hashie (>= 3.4, < 5.0) 23 | license-acceptance (>= 0.2.13, < 3.0) 24 | method_source (>= 0.8, < 2.0) 25 | mixlib-log (~> 3.0) 26 | multipart-post (~> 2.0) 27 | parallel (~> 1.9) 28 | parslet (>= 1.5, < 2.0) 29 | pry (~> 0.13) 30 | rspec (>= 3.9, <= 3.11) 31 | rspec-its (~> 1.2) 32 | rubyzip (>= 1.2.2, < 3.0) 33 | semverse (~> 3.0) 34 | sslshake (~> 1.2) 35 | thor (>= 0.20, < 2.0) 36 | tomlrb (>= 1.2, < 2.1) 37 | train-core (~> 3.10) 38 | tty-prompt (~> 0.17) 39 | tty-table (~> 0.10) 40 | 41 | GIT 42 | remote: https://gitlab.com/saltstack-formulas/infrastructure/kitchen-docker 43 | revision: 9a09bc1e571e25f3ccabf4725ca2048d970fff82 44 | branch: ssf 45 | specs: 46 | kitchen-docker (2.12.0) 47 | test-kitchen (>= 1.0.0) 48 | 49 | GEM 50 | remote: https://rubygems.org/ 51 | specs: 52 | activesupport (7.0.3.1) 53 | concurrent-ruby (~> 1.0, >= 1.0.2) 54 | i18n (>= 1.6, < 2) 55 | minitest (>= 5.1) 56 | tzinfo (~> 2.0) 57 | addressable (2.8.0) 58 | public_suffix (>= 2.0.2, < 5.0) 59 | ast (2.4.2) 60 | aws-eventstream (1.2.0) 61 | aws-partitions (1.607.0) 62 | aws-sdk-alexaforbusiness (1.56.0) 63 | aws-sdk-core (~> 3, >= 3.127.0) 64 | aws-sigv4 (~> 1.1) 65 | aws-sdk-amplify (1.32.0) 66 | aws-sdk-core (~> 3, >= 3.120.0) 67 | aws-sigv4 (~> 1.1) 68 | aws-sdk-apigateway (1.78.0) 69 | aws-sdk-core (~> 3, >= 3.127.0) 70 | aws-sigv4 (~> 1.1) 71 | aws-sdk-apigatewayv2 (1.42.0) 72 | aws-sdk-core (~> 3, >= 3.127.0) 73 | aws-sigv4 (~> 1.1) 74 | aws-sdk-applicationautoscaling (1.51.0) 75 | aws-sdk-core (~> 3, >= 3.112.0) 76 | aws-sigv4 (~> 1.1) 77 | aws-sdk-athena (1.55.0) 78 | aws-sdk-core (~> 3, >= 3.127.0) 79 | aws-sigv4 (~> 1.1) 80 | aws-sdk-autoscaling (1.63.0) 81 | aws-sdk-core (~> 3, >= 3.112.0) 82 | aws-sigv4 (~> 1.1) 83 | aws-sdk-batch (1.47.0) 84 | aws-sdk-core (~> 3, >= 3.112.0) 85 | aws-sigv4 (~> 1.1) 86 | aws-sdk-budgets (1.50.0) 87 | aws-sdk-core (~> 3, >= 3.127.0) 88 | aws-sigv4 (~> 1.1) 89 | aws-sdk-cloudformation (1.70.0) 90 | aws-sdk-core (~> 3, >= 3.127.0) 91 | aws-sigv4 (~> 1.1) 92 | aws-sdk-cloudfront (1.65.0) 93 | aws-sdk-core (~> 3, >= 3.127.0) 94 | aws-sigv4 (~> 1.1) 95 | aws-sdk-cloudhsm (1.39.0) 96 | aws-sdk-core (~> 3, >= 3.127.0) 97 | aws-sigv4 (~> 1.1) 98 | aws-sdk-cloudhsmv2 (1.42.0) 99 | aws-sdk-core (~> 3, >= 3.127.0) 100 | aws-sigv4 (~> 1.1) 101 | aws-sdk-cloudtrail (1.49.0) 102 | aws-sdk-core (~> 3, >= 3.127.0) 103 | aws-sigv4 (~> 1.1) 104 | aws-sdk-cloudwatch (1.64.0) 105 | aws-sdk-core (~> 3, >= 3.127.0) 106 | aws-sigv4 (~> 1.1) 107 | aws-sdk-cloudwatchevents (1.46.0) 108 | aws-sdk-core (~> 3, >= 3.112.0) 109 | aws-sigv4 (~> 1.1) 110 | aws-sdk-cloudwatchlogs (1.53.0) 111 | aws-sdk-core (~> 3, >= 3.127.0) 112 | aws-sigv4 (~> 1.1) 113 | aws-sdk-codecommit (1.51.0) 114 | aws-sdk-core (~> 3, >= 3.127.0) 115 | aws-sigv4 (~> 1.1) 116 | aws-sdk-codedeploy (1.49.0) 117 | aws-sdk-core (~> 3, >= 3.127.0) 118 | aws-sigv4 (~> 1.1) 119 | aws-sdk-codepipeline (1.53.0) 120 | aws-sdk-core (~> 3, >= 3.127.0) 121 | aws-sigv4 (~> 1.1) 122 | aws-sdk-cognitoidentity (1.31.0) 123 | aws-sdk-core (~> 3, >= 3.112.0) 124 | aws-sigv4 (~> 1.1) 125 | aws-sdk-cognitoidentityprovider (1.53.0) 126 | aws-sdk-core (~> 3, >= 3.112.0) 127 | aws-sigv4 (~> 1.1) 128 | aws-sdk-configservice (1.79.0) 129 | aws-sdk-core (~> 3, >= 3.127.0) 130 | aws-sigv4 (~> 1.1) 131 | aws-sdk-core (3.131.2) 132 | aws-eventstream (~> 1, >= 1.0.2) 133 | aws-partitions (~> 1, >= 1.525.0) 134 | aws-sigv4 (~> 1.1) 135 | jmespath (~> 1, >= 1.6.1) 136 | aws-sdk-costandusagereportservice (1.40.0) 137 | aws-sdk-core (~> 3, >= 3.127.0) 138 | aws-sigv4 (~> 1.1) 139 | aws-sdk-databasemigrationservice (1.53.0) 140 | aws-sdk-core (~> 3, >= 3.112.0) 141 | aws-sigv4 (~> 1.1) 142 | aws-sdk-dynamodb (1.75.0) 143 | aws-sdk-core (~> 3, >= 3.127.0) 144 | aws-sigv4 (~> 1.1) 145 | aws-sdk-ec2 (1.322.0) 146 | aws-sdk-core (~> 3, >= 3.127.0) 147 | aws-sigv4 (~> 1.1) 148 | aws-sdk-ecr (1.56.0) 149 | aws-sdk-core (~> 3, >= 3.127.0) 150 | aws-sigv4 (~> 1.1) 151 | aws-sdk-ecrpublic (1.12.0) 152 | aws-sdk-core (~> 3, >= 3.127.0) 153 | aws-sigv4 (~> 1.1) 154 | aws-sdk-ecs (1.100.0) 155 | aws-sdk-core (~> 3, >= 3.127.0) 156 | aws-sigv4 (~> 1.1) 157 | aws-sdk-efs (1.54.0) 158 | aws-sdk-core (~> 3, >= 3.127.0) 159 | aws-sigv4 (~> 1.1) 160 | aws-sdk-eks (1.75.0) 161 | aws-sdk-core (~> 3, >= 3.127.0) 162 | aws-sigv4 (~> 1.1) 163 | aws-sdk-elasticache (1.78.0) 164 | aws-sdk-core (~> 3, >= 3.127.0) 165 | aws-sigv4 (~> 1.1) 166 | aws-sdk-elasticbeanstalk (1.51.0) 167 | aws-sdk-core (~> 3, >= 3.127.0) 168 | aws-sigv4 (~> 1.1) 169 | aws-sdk-elasticloadbalancing (1.40.0) 170 | aws-sdk-core (~> 3, >= 3.127.0) 171 | aws-sigv4 (~> 1.1) 172 | aws-sdk-elasticloadbalancingv2 (1.78.0) 173 | aws-sdk-core (~> 3, >= 3.127.0) 174 | aws-sigv4 (~> 1.1) 175 | aws-sdk-elasticsearchservice (1.65.0) 176 | aws-sdk-core (~> 3, >= 3.127.0) 177 | aws-sigv4 (~> 1.1) 178 | aws-sdk-emr (1.53.0) 179 | aws-sdk-core (~> 3, >= 3.121.2) 180 | aws-sigv4 (~> 1.1) 181 | aws-sdk-eventbridge (1.24.0) 182 | aws-sdk-core (~> 3, >= 3.112.0) 183 | aws-sigv4 (~> 1.1) 184 | aws-sdk-firehose (1.48.0) 185 | aws-sdk-core (~> 3, >= 3.127.0) 186 | aws-sigv4 (~> 1.1) 187 | aws-sdk-glue (1.88.0) 188 | aws-sdk-core (~> 3, >= 3.112.0) 189 | aws-sigv4 (~> 1.1) 190 | aws-sdk-guardduty (1.58.0) 191 | aws-sdk-core (~> 3, >= 3.127.0) 192 | aws-sigv4 (~> 1.1) 193 | aws-sdk-iam (1.69.0) 194 | aws-sdk-core (~> 3, >= 3.127.0) 195 | aws-sigv4 (~> 1.1) 196 | aws-sdk-kafka (1.50.0) 197 | aws-sdk-core (~> 3, >= 3.127.0) 198 | aws-sigv4 (~> 1.1) 199 | aws-sdk-kinesis (1.41.0) 200 | aws-sdk-core (~> 3, >= 3.127.0) 201 | aws-sigv4 (~> 1.1) 202 | aws-sdk-kms (1.57.0) 203 | aws-sdk-core (~> 3, >= 3.127.0) 204 | aws-sigv4 (~> 1.1) 205 | aws-sdk-lambda (1.84.0) 206 | aws-sdk-core (~> 3, >= 3.127.0) 207 | aws-sigv4 (~> 1.1) 208 | aws-sdk-mq (1.40.0) 209 | aws-sdk-core (~> 3, >= 3.120.0) 210 | aws-sigv4 (~> 1.1) 211 | aws-sdk-networkfirewall (1.17.0) 212 | aws-sdk-core (~> 3, >= 3.127.0) 213 | aws-sigv4 (~> 1.1) 214 | aws-sdk-networkmanager (1.24.0) 215 | aws-sdk-core (~> 3, >= 3.127.0) 216 | aws-sigv4 (~> 1.1) 217 | aws-sdk-organizations (1.59.0) 218 | aws-sdk-core (~> 3, >= 3.112.0) 219 | aws-sigv4 (~> 1.1) 220 | aws-sdk-ram (1.26.0) 221 | aws-sdk-core (~> 3, >= 3.112.0) 222 | aws-sigv4 (~> 1.1) 223 | aws-sdk-rds (1.148.0) 224 | aws-sdk-core (~> 3, >= 3.127.0) 225 | aws-sigv4 (~> 1.1) 226 | aws-sdk-redshift (1.84.0) 227 | aws-sdk-core (~> 3, >= 3.127.0) 228 | aws-sigv4 (~> 1.1) 229 | aws-sdk-route53 (1.63.0) 230 | aws-sdk-core (~> 3, >= 3.127.0) 231 | aws-sigv4 (~> 1.1) 232 | aws-sdk-route53domains (1.40.0) 233 | aws-sdk-core (~> 3, >= 3.127.0) 234 | aws-sigv4 (~> 1.1) 235 | aws-sdk-route53resolver (1.37.0) 236 | aws-sdk-core (~> 3, >= 3.127.0) 237 | aws-sigv4 (~> 1.1) 238 | aws-sdk-s3 (1.114.0) 239 | aws-sdk-core (~> 3, >= 3.127.0) 240 | aws-sdk-kms (~> 1) 241 | aws-sigv4 (~> 1.4) 242 | aws-sdk-s3control (1.43.0) 243 | aws-sdk-core (~> 3, >= 3.122.0) 244 | aws-sigv4 (~> 1.1) 245 | aws-sdk-secretsmanager (1.46.0) 246 | aws-sdk-core (~> 3, >= 3.112.0) 247 | aws-sigv4 (~> 1.1) 248 | aws-sdk-securityhub (1.67.0) 249 | aws-sdk-core (~> 3, >= 3.127.0) 250 | aws-sigv4 (~> 1.1) 251 | aws-sdk-servicecatalog (1.60.0) 252 | aws-sdk-core (~> 3, >= 3.112.0) 253 | aws-sigv4 (~> 1.1) 254 | aws-sdk-ses (1.41.0) 255 | aws-sdk-core (~> 3, >= 3.120.0) 256 | aws-sigv4 (~> 1.1) 257 | aws-sdk-shield (1.48.0) 258 | aws-sdk-core (~> 3, >= 3.127.0) 259 | aws-sigv4 (~> 1.1) 260 | aws-sdk-signer (1.32.0) 261 | aws-sdk-core (~> 3, >= 3.120.0) 262 | aws-sigv4 (~> 1.1) 263 | aws-sdk-simpledb (1.29.0) 264 | aws-sdk-core (~> 3, >= 3.120.0) 265 | aws-sigv2 (~> 1.0) 266 | aws-sdk-sms (1.40.0) 267 | aws-sdk-core (~> 3, >= 3.127.0) 268 | aws-sigv4 (~> 1.1) 269 | aws-sdk-sns (1.53.0) 270 | aws-sdk-core (~> 3, >= 3.127.0) 271 | aws-sigv4 (~> 1.1) 272 | aws-sdk-sqs (1.51.1) 273 | aws-sdk-core (~> 3, >= 3.127.0) 274 | aws-sigv4 (~> 1.1) 275 | aws-sdk-ssm (1.137.0) 276 | aws-sdk-core (~> 3, >= 3.127.0) 277 | aws-sigv4 (~> 1.1) 278 | aws-sdk-states (1.39.0) 279 | aws-sdk-core (~> 3, >= 3.112.0) 280 | aws-sigv4 (~> 1.1) 281 | aws-sdk-synthetics (1.19.0) 282 | aws-sdk-core (~> 3, >= 3.121.2) 283 | aws-sigv4 (~> 1.1) 284 | aws-sdk-transfer (1.34.0) 285 | aws-sdk-core (~> 3, >= 3.112.0) 286 | aws-sigv4 (~> 1.1) 287 | aws-sdk-waf (1.43.0) 288 | aws-sdk-core (~> 3, >= 3.122.0) 289 | aws-sigv4 (~> 1.1) 290 | aws-sigv2 (1.1.0) 291 | aws-sigv4 (1.5.0) 292 | aws-eventstream (~> 1, >= 1.0.2) 293 | azure_graph_rbac (0.17.2) 294 | ms_rest_azure (~> 0.12.0) 295 | azure_mgmt_key_vault (0.17.7) 296 | ms_rest_azure (~> 0.12.0) 297 | azure_mgmt_resources (0.18.2) 298 | ms_rest_azure (~> 0.12.0) 299 | azure_mgmt_security (0.19.0) 300 | ms_rest_azure (~> 0.12.0) 301 | azure_mgmt_storage (0.23.0) 302 | ms_rest_azure (~> 0.12.0) 303 | bcrypt_pbkdf (1.1.0) 304 | bson (4.15.0) 305 | builder (3.2.4) 306 | chef-config (17.10.0) 307 | addressable 308 | chef-utils (= 17.10.0) 309 | fuzzyurl 310 | mixlib-config (>= 2.2.12, < 4.0) 311 | mixlib-shellout (>= 2.0, < 4.0) 312 | tomlrb (~> 1.2) 313 | chef-telemetry (1.1.1) 314 | chef-config 315 | concurrent-ruby (~> 1.0) 316 | chef-utils (17.10.0) 317 | concurrent-ruby 318 | coderay (1.1.3) 319 | concurrent-ruby (1.1.10) 320 | cookstyle (7.32.1) 321 | rubocop (= 1.25.1) 322 | declarative (0.0.20) 323 | diff-lcs (1.5.0) 324 | docker-api (2.2.0) 325 | excon (>= 0.47.0) 326 | multi_json 327 | domain_name (0.5.20190701) 328 | unf (>= 0.0.5, < 1.0.0) 329 | ed25519 (1.3.0) 330 | erubi (1.10.0) 331 | excon (0.92.3) 332 | faraday (1.4.3) 333 | faraday-em_http (~> 1.0) 334 | faraday-em_synchrony (~> 1.0) 335 | faraday-excon (~> 1.1) 336 | faraday-net_http (~> 1.0) 337 | faraday-net_http_persistent (~> 1.1) 338 | multipart-post (>= 1.2, < 3) 339 | ruby2_keywords (>= 0.0.4) 340 | faraday-cookie_jar (0.0.7) 341 | faraday (>= 0.8.0) 342 | http-cookie (~> 1.0.0) 343 | faraday-em_http (1.0.0) 344 | faraday-em_synchrony (1.0.0) 345 | faraday-excon (1.1.0) 346 | faraday-net_http (1.0.1) 347 | faraday-net_http_persistent (1.2.0) 348 | faraday_middleware (1.0.0) 349 | faraday (~> 1.0) 350 | ffi (1.15.5) 351 | fuzzyurl (0.9.0) 352 | google-api-client (0.52.0) 353 | addressable (~> 2.5, >= 2.5.1) 354 | googleauth (~> 0.9) 355 | httpclient (>= 2.8.1, < 3.0) 356 | mini_mime (~> 1.0) 357 | representable (~> 3.0) 358 | retriable (>= 2.0, < 4.0) 359 | rexml 360 | signet (~> 0.12) 361 | googleauth (0.14.0) 362 | faraday (>= 0.17.3, < 2.0) 363 | jwt (>= 1.4, < 3.0) 364 | memoist (~> 0.16) 365 | multi_json (~> 1.11) 366 | os (>= 0.9, < 2.0) 367 | signet (~> 0.14) 368 | gssapi (1.3.1) 369 | ffi (>= 1.0.1) 370 | gyoku (1.4.0) 371 | builder (>= 2.1.2) 372 | rexml (~> 3.0) 373 | hashie (4.1.0) 374 | highline (2.0.3) 375 | http-cookie (1.0.5) 376 | domain_name (~> 0.5) 377 | httpclient (2.8.3) 378 | i18n (1.12.0) 379 | concurrent-ruby (~> 1.0) 380 | inifile (3.0.0) 381 | jmespath (1.6.1) 382 | json (2.6.2) 383 | jwt (2.4.1) 384 | kitchen-inspec (2.6.1) 385 | hashie (>= 3.4, <= 5.0) 386 | inspec (>= 2.2.64, < 7.0) 387 | test-kitchen (>= 2.7, < 4) 388 | kitchen-salt (0.7.2) 389 | hashie (>= 3.5) 390 | test-kitchen (>= 1.4) 391 | license-acceptance (2.1.13) 392 | pastel (~> 0.7) 393 | tomlrb (>= 1.2, < 3.0) 394 | tty-box (~> 0.6) 395 | tty-prompt (~> 0.20) 396 | little-plugger (1.1.4) 397 | logging (2.3.1) 398 | little-plugger (~> 1.1) 399 | multi_json (~> 1.14) 400 | memoist (0.16.2) 401 | method_source (1.0.0) 402 | mini_mime (1.1.2) 403 | minitest (5.16.2) 404 | mixlib-config (3.0.27) 405 | tomlrb 406 | mixlib-install (3.12.19) 407 | mixlib-shellout 408 | mixlib-versioning 409 | thor 410 | mixlib-log (3.0.9) 411 | mixlib-shellout (3.2.7) 412 | chef-utils 413 | mixlib-versioning (1.2.12) 414 | mongo (2.13.2) 415 | bson (>= 4.8.2, < 5.0.0) 416 | ms_rest (0.7.6) 417 | concurrent-ruby (~> 1.0) 418 | faraday (>= 0.9, < 2.0.0) 419 | timeliness (~> 0.3.10) 420 | ms_rest_azure (0.12.0) 421 | concurrent-ruby (~> 1.0) 422 | faraday (>= 0.9, < 2.0.0) 423 | faraday-cookie_jar (~> 0.0.6) 424 | ms_rest (~> 0.7.6) 425 | multi_json (1.15.0) 426 | multipart-post (2.2.3) 427 | net-scp (3.0.0) 428 | net-ssh (>= 2.6.5, < 7.0.0) 429 | net-ssh (6.1.0) 430 | net-ssh-gateway (2.0.0) 431 | net-ssh (>= 4.0.0) 432 | nori (2.6.0) 433 | options (2.3.2) 434 | os (1.1.4) 435 | parallel (1.22.1) 436 | parser (3.1.2.0) 437 | ast (~> 2.4.1) 438 | parslet (1.8.2) 439 | pastel (0.8.0) 440 | tty-color (~> 0.5) 441 | progress_bar (1.3.3) 442 | highline (>= 1.6, < 3) 443 | options (~> 2.3.0) 444 | pry (0.14.1) 445 | coderay (~> 1.1) 446 | method_source (~> 1.0) 447 | public_suffix (4.0.7) 448 | rainbow (3.1.1) 449 | rake (13.0.6) 450 | regexp_parser (2.5.0) 451 | representable (3.2.0) 452 | declarative (< 0.1.0) 453 | trailblazer-option (>= 0.1.1, < 0.2.0) 454 | uber (< 0.2.0) 455 | retriable (3.1.2) 456 | rexml (3.2.5) 457 | rspec (3.11.0) 458 | rspec-core (~> 3.11.0) 459 | rspec-expectations (~> 3.11.0) 460 | rspec-mocks (~> 3.11.0) 461 | rspec-core (3.11.0) 462 | rspec-support (~> 3.11.0) 463 | rspec-expectations (3.11.0) 464 | diff-lcs (>= 1.2.0, < 2.0) 465 | rspec-support (~> 3.11.0) 466 | rspec-its (1.3.0) 467 | rspec-core (>= 3.0.0) 468 | rspec-expectations (>= 3.0.0) 469 | rspec-mocks (3.11.1) 470 | diff-lcs (>= 1.2.0, < 2.0) 471 | rspec-support (~> 3.11.0) 472 | rspec-support (3.11.0) 473 | rubocop (1.25.1) 474 | parallel (~> 1.10) 475 | parser (>= 3.1.0.0) 476 | rainbow (>= 2.2.2, < 4.0) 477 | regexp_parser (>= 1.8, < 3.0) 478 | rexml 479 | rubocop-ast (>= 1.15.1, < 2.0) 480 | ruby-progressbar (~> 1.7) 481 | unicode-display_width (>= 1.4.0, < 3.0) 482 | rubocop-ast (1.19.1) 483 | parser (>= 3.1.1.0) 484 | ruby-progressbar (1.11.0) 485 | ruby2_keywords (0.0.5) 486 | rubyntlm (0.6.3) 487 | rubyzip (2.3.2) 488 | semverse (3.0.2) 489 | signet (0.17.0) 490 | addressable (~> 2.8) 491 | faraday (>= 0.17.5, < 3.a) 492 | jwt (>= 1.5, < 3.0) 493 | multi_json (~> 1.10) 494 | sslshake (1.3.1) 495 | strings (0.2.1) 496 | strings-ansi (~> 0.2) 497 | unicode-display_width (>= 1.5, < 3.0) 498 | unicode_utils (~> 1.4) 499 | strings-ansi (0.2.0) 500 | test-kitchen (3.3.1) 501 | bcrypt_pbkdf (~> 1.0) 502 | chef-utils (>= 16.4.35) 503 | ed25519 (~> 1.2) 504 | license-acceptance (>= 1.0.11, < 3.0) 505 | mixlib-install (~> 3.6) 506 | mixlib-shellout (>= 1.2, < 4.0) 507 | net-scp (>= 1.1, < 4.0) 508 | net-ssh (>= 2.9, < 7.0) 509 | net-ssh-gateway (>= 1.2, < 3.0) 510 | thor (>= 0.19, < 2.0) 511 | winrm (~> 2.0) 512 | winrm-elevated (~> 1.0) 513 | winrm-fs (~> 1.1) 514 | thor (1.2.1) 515 | timeliness (0.3.10) 516 | tomlrb (1.3.0) 517 | trailblazer-option (0.1.2) 518 | train (3.10.1) 519 | activesupport (>= 6.0.3.1) 520 | azure_graph_rbac (~> 0.16) 521 | azure_mgmt_key_vault (~> 0.17) 522 | azure_mgmt_resources (~> 0.15) 523 | azure_mgmt_security (~> 0.18) 524 | azure_mgmt_storage (~> 0.18) 525 | docker-api (>= 1.26, < 3.0) 526 | google-api-client (>= 0.23.9, <= 0.52.0) 527 | googleauth (>= 0.6.6, <= 0.14.0) 528 | inifile (~> 3.0) 529 | train-core (= 3.10.1) 530 | train-winrm (~> 0.2) 531 | train-aws (0.2.24) 532 | aws-sdk-alexaforbusiness (~> 1.0) 533 | aws-sdk-amplify (~> 1.32.0) 534 | aws-sdk-apigateway (~> 1.0) 535 | aws-sdk-apigatewayv2 (~> 1.0) 536 | aws-sdk-applicationautoscaling (>= 1.46, < 1.52) 537 | aws-sdk-athena (~> 1.0) 538 | aws-sdk-autoscaling (>= 1.22, < 1.64) 539 | aws-sdk-batch (>= 1.36, < 1.48) 540 | aws-sdk-budgets (~> 1.0) 541 | aws-sdk-cloudformation (~> 1.0) 542 | aws-sdk-cloudfront (~> 1.0) 543 | aws-sdk-cloudhsm (~> 1.0) 544 | aws-sdk-cloudhsmv2 (~> 1.0) 545 | aws-sdk-cloudtrail (~> 1.8) 546 | aws-sdk-cloudwatch (~> 1.13) 547 | aws-sdk-cloudwatchevents (>= 1.36, < 1.47) 548 | aws-sdk-cloudwatchlogs (~> 1.13) 549 | aws-sdk-codecommit (~> 1.0) 550 | aws-sdk-codedeploy (~> 1.0) 551 | aws-sdk-codepipeline (~> 1.0) 552 | aws-sdk-cognitoidentity (>= 1.26, < 1.32) 553 | aws-sdk-cognitoidentityprovider (>= 1.46, < 1.54) 554 | aws-sdk-configservice (~> 1.21) 555 | aws-sdk-core (~> 3.0) 556 | aws-sdk-costandusagereportservice (~> 1.6) 557 | aws-sdk-databasemigrationservice (>= 1.42, < 1.54) 558 | aws-sdk-dynamodb (~> 1.31) 559 | aws-sdk-ec2 (~> 1.70) 560 | aws-sdk-ecr (~> 1.18) 561 | aws-sdk-ecrpublic (~> 1.3) 562 | aws-sdk-ecs (~> 1.30) 563 | aws-sdk-efs (~> 1.0) 564 | aws-sdk-eks (~> 1.9) 565 | aws-sdk-elasticache (~> 1.0) 566 | aws-sdk-elasticbeanstalk (~> 1.0) 567 | aws-sdk-elasticloadbalancing (~> 1.8) 568 | aws-sdk-elasticloadbalancingv2 (~> 1.0) 569 | aws-sdk-elasticsearchservice (~> 1.0) 570 | aws-sdk-emr (~> 1.53.0) 571 | aws-sdk-eventbridge (~> 1.24.0) 572 | aws-sdk-firehose (~> 1.0) 573 | aws-sdk-glue (>= 1.71, < 1.89) 574 | aws-sdk-guardduty (~> 1.31) 575 | aws-sdk-iam (~> 1.13) 576 | aws-sdk-kafka (~> 1.0) 577 | aws-sdk-kinesis (~> 1.0) 578 | aws-sdk-kms (~> 1.13) 579 | aws-sdk-lambda (~> 1.0) 580 | aws-sdk-mq (~> 1.40.0) 581 | aws-sdk-networkfirewall (>= 1.6.0) 582 | aws-sdk-networkmanager (>= 1.13.0) 583 | aws-sdk-organizations (>= 1.17, < 1.60) 584 | aws-sdk-ram (>= 1.21, < 1.27) 585 | aws-sdk-rds (~> 1.43) 586 | aws-sdk-redshift (~> 1.0) 587 | aws-sdk-route53 (~> 1.0) 588 | aws-sdk-route53domains (~> 1.0) 589 | aws-sdk-route53resolver (~> 1.0) 590 | aws-sdk-s3 (~> 1.30) 591 | aws-sdk-s3control (~> 1.43.0) 592 | aws-sdk-secretsmanager (>= 1.42, < 1.47) 593 | aws-sdk-securityhub (~> 1.0) 594 | aws-sdk-servicecatalog (>= 1.48, < 1.61) 595 | aws-sdk-ses (~> 1.41.0) 596 | aws-sdk-shield (~> 1.30) 597 | aws-sdk-signer (~> 1.32.0) 598 | aws-sdk-simpledb (~> 1.29.0) 599 | aws-sdk-sms (~> 1.0) 600 | aws-sdk-sns (~> 1.9) 601 | aws-sdk-sqs (~> 1.10) 602 | aws-sdk-ssm (~> 1.0) 603 | aws-sdk-states (>= 1.35, < 1.40) 604 | aws-sdk-synthetics (~> 1.19.0) 605 | aws-sdk-transfer (>= 1.26, < 1.35) 606 | aws-sdk-waf (~> 1.43.0) 607 | train-core (3.10.1) 608 | addressable (~> 2.5) 609 | ffi (!= 1.13.0) 610 | json (>= 1.8, < 3.0) 611 | mixlib-shellout (>= 2.0, < 4.0) 612 | net-scp (>= 1.2, < 4.0) 613 | net-ssh (>= 2.9, < 7.0) 614 | train-habitat (0.2.22) 615 | train-winrm (0.2.13) 616 | winrm (>= 2.3.6, < 3.0) 617 | winrm-elevated (~> 1.2.2) 618 | winrm-fs (~> 1.0) 619 | tty-box (0.7.0) 620 | pastel (~> 0.8) 621 | strings (~> 0.2.0) 622 | tty-cursor (~> 0.7) 623 | tty-color (0.6.0) 624 | tty-cursor (0.7.1) 625 | tty-prompt (0.23.1) 626 | pastel (~> 0.8) 627 | tty-reader (~> 0.8) 628 | tty-reader (0.9.0) 629 | tty-cursor (~> 0.7) 630 | tty-screen (~> 0.8) 631 | wisper (~> 2.0) 632 | tty-screen (0.8.1) 633 | tty-table (0.12.0) 634 | pastel (~> 0.8) 635 | strings (~> 0.2.0) 636 | tty-screen (~> 0.8) 637 | tzinfo (2.0.4) 638 | concurrent-ruby (~> 1.0) 639 | uber (0.1.0) 640 | unf (0.1.4) 641 | unf_ext 642 | unf_ext (0.0.8.2) 643 | unicode-display_width (2.2.0) 644 | unicode_utils (1.4.0) 645 | winrm (2.3.6) 646 | builder (>= 2.1.2) 647 | erubi (~> 1.8) 648 | gssapi (~> 1.2) 649 | gyoku (~> 1.0) 650 | httpclient (~> 2.2, >= 2.2.0.2) 651 | logging (>= 1.6.1, < 3.0) 652 | nori (~> 2.0) 653 | rubyntlm (~> 0.6.0, >= 0.6.3) 654 | winrm-elevated (1.2.3) 655 | erubi (~> 1.8) 656 | winrm (~> 2.0) 657 | winrm-fs (~> 1.0) 658 | winrm-fs (1.3.5) 659 | erubi (~> 1.8) 660 | logging (>= 1.6.1, < 3.0) 661 | rubyzip (~> 2.0) 662 | winrm (~> 2.0) 663 | wisper (2.0.1) 664 | 665 | PLATFORMS 666 | ruby 667 | 668 | DEPENDENCIES 669 | inspec! 670 | kitchen-docker! 671 | kitchen-inspec (>= 2.5.0) 672 | kitchen-salt (>= 0.7.2) 673 | 674 | BUNDLED WITH 675 | 2.1.2 676 | --------------------------------------------------------------------------------