├── nfs ├── oscodenamemap.yaml ├── osfingermap.yaml ├── osmap.yaml ├── client.sls ├── unmount.sls ├── files │ └── exports ├── service.sls ├── defaults.yaml ├── _mapdata │ ├── _mapdata.jinja │ └── init.sls ├── mount.sls ├── server.sls ├── osfamilymap.yaml └── map.jinja ├── .rstcheck.cfg ├── commitlint.config.js ├── FORMULA ├── .github └── workflows │ ├── commitlint.yml │ └── kitchen.vagrant.yml ├── bin ├── install-hooks └── kitchen ├── .salt-lint ├── .rubocop.yml ├── test └── integration │ ├── share │ ├── inspec.yml │ ├── README.md │ └── libraries │ │ └── system.rb │ └── default │ ├── inspec.yml │ └── README.md ├── release-rules.js ├── pillar.example ├── Gemfile ├── kitchen.vagrant.yml ├── pre-commit_semantic-release.sh ├── .yamllint ├── .gitignore ├── .pre-commit-config.yaml ├── CODEOWNERS ├── docs ├── README.rst ├── AUTHORS.rst └── CHANGELOG.rst ├── release.config.js ├── AUTHORS.md ├── CHANGELOG.md ├── .travis.yml ├── kitchen.yml ├── .gitlab-ci.yml ├── LICENSE └── Gemfile.lock /nfs/oscodenamemap.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | openSUSE Tumbleweed: 3 | service_name: 'nfs-server' 4 | -------------------------------------------------------------------------------- /nfs/osfingermap.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | Debian-8: 3 | service_name: 'nfs-kernel-server' 4 | 5 | CentOS-6: 6 | service_name: 'nfs' 7 | -------------------------------------------------------------------------------- /nfs/osmap.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | Fedora: 3 | pkgs_server: ['nfs-utils'] 4 | pkgs_client: ['nfs-utils'] 5 | service_name: ['rpcbind', 'nfs-server'] 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 | -------------------------------------------------------------------------------- /nfs/client.sls: -------------------------------------------------------------------------------- 1 | {% from "nfs/map.jinja" import nfs with context %} 2 | 3 | {% if nfs.pkgs_client %} 4 | nfs-client: 5 | pkg.installed: 6 | - pkgs: {{ nfs.pkgs_client|json }} 7 | {% endif %} 8 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /FORMULA: -------------------------------------------------------------------------------- 1 | name: nfs 2 | os: Debian, Ubuntu, Raspbian, RedHat, Fedora, CentOS, Suse, openSUSE 3 | os_family: Debian, RedHat, Suse, Gentoo 4 | version: 0.12.1 5 | release: 1 6 | minimum_version: 2017.7 7 | summary: nfs formula 8 | description: Formula to install and configure nfs server or client 9 | top_level_dir: nfs 10 | -------------------------------------------------------------------------------- /nfs/unmount.sls: -------------------------------------------------------------------------------- 1 | {% from "nfs/map.jinja" import nfs with context %} 2 | 3 | include: 4 | - nfs.client 5 | 6 | 7 | {% for m in salt['pillar.get']('nfs:unmount', {}).items() %} 8 | {{ m[1].mountpoint }}: 9 | mount.unmounted: 10 | - device: {{ m[1].location }} 11 | - {{ m[1].persist|default(nfs.persist_unmount) }} 12 | {% endfor %} 13 | -------------------------------------------------------------------------------- /nfs/files/exports: -------------------------------------------------------------------------------- 1 | ######################################################################## 2 | # File managed by Salt at <{{ source }}>. 3 | # Your changes will be overwritten. 4 | ######################################################################## 5 | # 6 | {% for dir, opts in salt['pillar.get']('nfs:server:exports', {}).items() -%} 7 | {{ dir }} {{ opts }} 8 | {% endfor -%} 9 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /nfs/service.sls: -------------------------------------------------------------------------------- 1 | {% from "nfs/map.jinja" import nfs with context %} 2 | 3 | nfs-service: 4 | {% if nfs.enabled %} 5 | service.running: 6 | - enable: True 7 | {% else %} 8 | service.dead: 9 | - enable: False 10 | {% endif %} 11 | {% if nfs.service_name is string %} 12 | - name: {{ nfs.service_name }} 13 | {% elif nfs.service_name is iterable %} 14 | - names: {{ nfs.service_name }} 15 | {% endif %} 16 | -------------------------------------------------------------------------------- /nfs/defaults.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | nfs: 3 | enabled: true 4 | mount_opts: null 5 | mkmnt: true 6 | persist_mount: true 7 | persist_unmount: false 8 | exports_file: '/etc/exports' 9 | export_template: 'salt://nfs/files/exports' 10 | # for most Linux distributions: 11 | pkgs_server: 12 | - nfs-common 13 | - nfs-kernel-server 14 | pkgs_client: 15 | - nfs-common 16 | service_name: nfs-kernel-server 17 | -------------------------------------------------------------------------------- /nfs/_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 | -------------------------------------------------------------------------------- /nfs/mount.sls: -------------------------------------------------------------------------------- 1 | {% from "nfs/map.jinja" import nfs with context %} 2 | 3 | include: 4 | - nfs.client 5 | 6 | {% for m in salt['pillar.get']('nfs:mount', {}).items() %} 7 | {{ m[1].mountpoint }}: 8 | mount.mounted: 9 | - device: {{ m[1].location }} 10 | - fstype: nfs 11 | {# Not every platform needs options #} 12 | {% if 'opts' in m[1] or nfs.mount_opts %} 13 | - opts: {{ m[1].opts|default(nfs.mount_opts) }} 14 | {% endif %} 15 | - persist: {{ m[1].persist|default(nfs.persist_mount) }} 16 | - mkmnt: {{ m[1].mkmnt|default(nfs.mkmnt) }} 17 | {% endfor %} 18 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.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/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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /nfs/_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 nfs with context %} 7 | 8 | {%- set _mapdata = { 9 | "values": nfs, 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 | -------------------------------------------------------------------------------- /pillar.example: -------------------------------------------------------------------------------- 1 | --- 2 | nfs: 3 | # Global settings: 4 | mkmnt: false 5 | mount_opts: noauto,ro 6 | persist_unmount: true 7 | persist_mount: false 8 | enabled: true 9 | 10 | # Server settings 11 | server: 12 | exports: 13 | /srv/homes: >- 14 | hostname1(rw,sync,no_subtree_check) 15 | hostname2(ro,sync,no_subtree_check) 16 | # FreeBSD specific: 17 | mountd_flags: -l -S 18 | 19 | # mount settings 20 | mount: 21 | somename: 22 | mountpoint: "/some/path" 23 | location: "hostname:/path" 24 | opts: "vers=3,rsize=65535,wsize=65535" 25 | persist: true 26 | mkmnt: true 27 | unmount: 28 | someothername: 29 | mountpoint: "/some/other/path" 30 | location: "hostname:/other/path" 31 | persist: false 32 | -------------------------------------------------------------------------------- /nfs/server.sls: -------------------------------------------------------------------------------- 1 | {% from "nfs/map.jinja" import nfs with context %} 2 | 3 | include: 4 | - nfs.service 5 | 6 | 7 | {% if nfs.pkgs_server %} 8 | nfs-server-deps: 9 | pkg.installed: 10 | - pkgs: {{ nfs.pkgs_server|json }} 11 | - require_in: 12 | - service: nfs-service 13 | {% endif %} 14 | 15 | nfs-exports-configure: 16 | file.managed: 17 | - name: {{ nfs.exports_file }} 18 | - source: {{ nfs.export_template }} 19 | - template: jinja 20 | - watch_in: 21 | - service: nfs-service 22 | 23 | {% if grains.get('os') == 'FreeBSD' %} 24 | {% set mountd_flags = salt['pillar.get']( 25 | 'nfs:server:mountd_flags', None) -%} 26 | {% if mountd_flags %} 27 | mountd_flags: 28 | sysrc.managed: 29 | - value: {{ mountd_flags }} 30 | {% endif %} 31 | {% endif %} 32 | -------------------------------------------------------------------------------- /test/integration/default/inspec.yml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | name: default 5 | title: nfs formula 6 | maintainer: SaltStack Formulas 7 | license: Apache-2.0 8 | summary: Verify that the nfs 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 | -------------------------------------------------------------------------------- /nfs/osfamilymap.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | Debian: 3 | pkgs_server: ['nfs-common', 'nfs-kernel-server'] 4 | pkgs_client: ['nfs-common'] 5 | service_name: 'nfs-server' 6 | 7 | Arch: 8 | pkgs_server: ['nfs-utils'] 9 | pkgs_client: ['nfs-utils'] 10 | service_name: 'nfs-server' 11 | 12 | OpenBSD: 13 | pkgs_server: null 14 | pkgs_client: null 15 | service_name: ['nfsd', 'mountd'] 16 | mount_opts: '-T,-R=1' 17 | 18 | FreeBSD: 19 | pkgs_server: null 20 | pkgs_client: null 21 | service_name: ['nfsd', 'mountd'] 22 | mount_opts: 'tcp,retrycnt=1' 23 | 24 | RedHat: 25 | pkgs_server: ['nfs-utils'] 26 | pkgs_client: ['nfs-utils'] 27 | service_name: 'nfs-server' 28 | 29 | Suse: 30 | pkgs_server: ['nfs-kernel-server'] 31 | pkgs_client: ['nfs-client'] 32 | service_name: 'nfsserver' 33 | 34 | Gentoo: 35 | pkgs_server: ['net-fs/nfs-utils'] 36 | pkgs_client: ['net-fs/nfs-utils'] 37 | service_name: {{ 'nfs-server' if grains.get('init', '') == 'systemd' else 'nfs' }} 38 | -------------------------------------------------------------------------------- /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 | 21 | group :vagrant do 22 | gem 'kitchen-vagrant' 23 | end 24 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /kitchen.vagrant.yml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | driver: 5 | name: vagrant 6 | cache_directory: false 7 | customize: 8 | usbxhci: 'off' 9 | gui: false 10 | ssh: 11 | shell: /bin/sh 12 | linked_clone: true 13 | <% unless ENV['CI'] %> 14 | synced_folders: 15 | - - '.kitchen/kitchen-vagrant/%{instance_name}/vagrant' 16 | - '/vagrant' 17 | - 'create: true, disabled: false' 18 | <% end %> 19 | 20 | platforms: 21 | - name: freebsd-130-master-py3 22 | driver: 23 | box: myii/freebsd-13.0-master-py3 24 | - name: freebsd-123-master-py3 25 | driver: 26 | box: myii/freebsd-12.3-master-py3 27 | - name: freebsd-130-3004-0-py3 28 | driver: 29 | box: myii/freebsd-13.0-3004.0-py3 30 | - name: freebsd-123-3004-0-py3 31 | driver: 32 | box: myii/freebsd-12.3-3004.0-py3 33 | - name: openbsd-70-3003-3-py3 34 | driver: 35 | box: myii/openbsd-7.0-3003.3-py3 36 | ssh: 37 | shell: /bin/ksh 38 | synced_folders: [] 39 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /nfs/map.jinja: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=jinja 3 | 4 | {# Start with defaults from defaults.yaml #} 5 | {% import_yaml 'nfs/defaults.yaml' as defaults %} 6 | {% import_yaml 'nfs/osfamilymap.yaml' as osfamilymap %} 7 | {% import_yaml 'nfs/osmap.yaml' as osmap %} 8 | {% import_yaml 'nfs/oscodenamemap.yaml' as oscodenamemap %} 9 | {% import_yaml 'nfs/osfingermap.yaml' as osfingermap %} 10 | 11 | {% set nfs = salt['grains.filter_by']( 12 | defaults, 13 | merge = salt['grains.filter_by']( 14 | osfamilymap, 15 | grain='os_family', 16 | merge = salt['grains.filter_by']( 17 | osmap, 18 | grain='os', 19 | merge = salt['grains.filter_by']( 20 | oscodenamemap, 21 | grain='oscodename', 22 | merge = salt['grains.filter_by']( 23 | osfingermap, 24 | grain='osfinger', 25 | merge = salt['pillar.get']('nfs', {}), 26 | ), 27 | ), 28 | ), 29 | ), 30 | base='nfs') 31 | %} 32 | 33 | -------------------------------------------------------------------------------- /.github/workflows/kitchen.vagrant.yml: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # vim: ft=yaml 3 | --- 4 | name: 'Kitchen Vagrant (FreeBSD & OpenBSD)' 5 | 'on': ['push', 'pull_request'] 6 | 7 | env: 8 | KITCHEN_LOCAL_YAML: 'kitchen.vagrant.yml' 9 | 10 | jobs: 11 | test: 12 | runs-on: 'macos-10.15' 13 | strategy: 14 | fail-fast: false 15 | matrix: 16 | instance: 17 | - default-freebsd-130-master-py3 18 | - default-freebsd-123-master-py3 19 | # - default-freebsd-130-3004-0-py3 20 | # - default-freebsd-123-3004-0-py3 21 | - default-openbsd-70-3003-3-py3 22 | steps: 23 | - name: 'Check out code' 24 | uses: 'actions/checkout@v2' 25 | - name: 'Set up Bundler cache' 26 | uses: 'actions/cache@v1' 27 | with: 28 | path: 'vendor/bundle' 29 | key: "${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}" 30 | restore-keys: "${{ runner.os }}-gems-" 31 | - name: 'Run Bundler' 32 | run: | 33 | ruby --version 34 | bundle config path vendor/bundle 35 | bundle install --jobs 4 --retry 3 36 | - name: 'Run Test Kitchen' 37 | run: 'bundle exec kitchen verify ${{ matrix.instance }}' 38 | -------------------------------------------------------------------------------- /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 | nfs/osfamilymap.yaml 24 | 25 | yaml-files: 26 | # Default settings 27 | - '*.yaml' 28 | - '*.yml' 29 | - .salt-lint 30 | - .yamllint 31 | # SaltStack Formulas additional settings 32 | - '*.example' 33 | - test/**/*.sls 34 | 35 | rules: 36 | empty-values: 37 | forbid-in-block-mappings: true 38 | forbid-in-flow-mappings: true 39 | line-length: 40 | # Increase from default of `80` 41 | # Based on https://github.com/PyCQA/flake8-bugbear#opinionated-warnings (`B950`) 42 | max: 88 43 | octal-values: 44 | forbid-implicit-octal: true 45 | forbid-explicit-octal: true 46 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /docs/README.rst: -------------------------------------------------------------------------------- 1 | .. _readme: 2 | 3 | nfs-formula 4 | ================ 5 | 6 | |img_travis| |img_sr| 7 | 8 | .. |img_travis| image:: https://travis-ci.com/saltstack-formulas/nfs-formula.svg?branch=master 9 | :alt: Travis CI Build Status 10 | :scale: 100% 11 | :target: https://travis-ci.com/saltstack-formulas/nfs-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 | 17 | A SaltStack formula to install and configure nfs server and client. 18 | 19 | .. contents:: **Table of Contents** 20 | 21 | General notes 22 | ------------- 23 | 24 | See the full `SaltStack Formulas installation and usage instructions 25 | `_. 26 | 27 | If you are interested in writing or contributing to formulas, please pay attention to the `Writing Formula Section 28 | `_. 29 | 30 | If you want to use this formula, please pay attention to the ``FORMULA`` file and/or ``git tag``, 31 | which contains the currently released version. This formula is versioned according to `Semantic Versioning `_. 32 | 33 | See `Formula Versioning Section `_ for more details. 34 | 35 | If you need (non-default) configuration, please pay attention to the ``pillar.example`` file and/or `Special notes`_ section. 36 | 37 | Contributing to this repo 38 | ------------------------- 39 | 40 | **Commit message formatting is significant!!** 41 | 42 | Please see `How to contribute `_ for more details. 43 | 44 | Special notes 45 | ------------- 46 | 47 | None 48 | 49 | Available states 50 | ---------------- 51 | 52 | .. contents:: 53 | :local: 54 | 55 | ``nfs.server`` 56 | ^^^^^^^^^^^^^^ 57 | 58 | - Install NFS server components 59 | - If ``nfs:enabled`` is set to ``true`` (the default), enable the NFS service - if set to ``false``, ensure it is stopped 60 | 61 | ``nfs.client`` 62 | ^^^^^^^^^^^^^^ 63 | 64 | Install nfs client components 65 | 66 | ``nfs.mount`` 67 | ^^^^^^^^^^^^^ 68 | 69 | Mount nfs shares via. pillar using the following parameters: 70 | 71 | * mountpoint 72 | * location 73 | * opts: default => "vers=3" 74 | * persist: default => True 75 | * mkmnt: default => True 76 | 77 | ``nfs.unmount`` 78 | ^^^^^^^^^^^^^^^ 79 | 80 | Unmount nfs shares via. pillar using the following parameters: 81 | 82 | * mountpoint 83 | * location 84 | * persist: default => False 85 | 86 | Testing 87 | ------- 88 | 89 | Linux testing is done with ``kitchen-salt``. 90 | 91 | Requirements 92 | ^^^^^^^^^^^^ 93 | 94 | * Ruby 95 | * Docker 96 | 97 | .. code-block:: bash 98 | 99 | $ gem install bundler 100 | $ bundle install 101 | $ bin/kitchen test [platform] 102 | 103 | Where ``[platform]`` is the platform name defined in ``kitchen.yml``, 104 | e.g. ``debian-9-2019-2-py3``. 105 | 106 | ``bin/kitchen converge`` 107 | ^^^^^^^^^^^^^^^^^^^^^^^^ 108 | 109 | Creates the docker instance and runs the ``nfs.server`` main state, ready for testing. 110 | 111 | ``bin/kitchen verify`` 112 | ^^^^^^^^^^^^^^^^^^^^^^ 113 | 114 | Runs the ``inspec`` tests on the actual instance. 115 | 116 | ``bin/kitchen destroy`` 117 | ^^^^^^^^^^^^^^^^^^^^^^^ 118 | 119 | Removes the docker instance. 120 | 121 | ``bin/kitchen test`` 122 | ^^^^^^^^^^^^^^^^^^^^ 123 | 124 | Runs all of the stages above in one go: i.e. ``destroy`` + ``converge`` + ``verify`` + ``destroy``. 125 | 126 | ``bin/kitchen login`` 127 | ^^^^^^^^^^^^^^^^^^^^^ 128 | 129 | Gives you SSH access to the instance for manual testing. 130 | 131 | -------------------------------------------------------------------------------- /release.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | branch: 'master', 3 | repositoryUrl: 'https://github.com/saltstack-formulas/nfs-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 | -------------------------------------------------------------------------------- /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)|52 8 | @syndicut|[@syndicut](https://github.com/syndicut)|10 9 | @iggy|[@iggy](https://github.com/iggy)|3 10 | @dafyddj|[@dafyddj](https://github.com/dafyddj)|3 11 | @javierbertoli|[@javierbertoli](https://github.com/javierbertoli)|3 12 | @aboe76|[@aboe76](https://github.com/aboe76)|3 13 | @nmadhok|[@nmadhok](https://github.com/nmadhok)|3 14 | @0xf10e|[@0xf10e](https://github.com/0xf10e)|3 15 | @melipharo|[@melipharo](https://github.com/melipharo)|2 16 | @daks|[@daks](https://github.com/daks)|2 17 | @pprkut|[@pprkut](https://github.com/pprkut)|2 18 | @noelmcloughlin|[@noelmcloughlin](https://github.com/noelmcloughlin)|2 19 | @babilen5|[@babilen5](https://github.com/babilen5)|2 20 | @roedie|[@roedie](https://github.com/roedie)|2 21 | @bmwiedemann|[@bmwiedemann](https://github.com/bmwiedemann)|1 22 | @baby-gnu|[@baby-gnu](https://github.com/baby-gnu)|1 23 | @gravyboat|[@gravyboat](https://github.com/gravyboat)|1 24 | @aphor|[@aphor](https://github.com/aphor)|1 25 | @jcftang|[@jcftang](https://github.com/jcftang)|1 26 | @norwoodj|[@norwoodj](https://github.com/norwoodj)|1 27 | @ryanwalder|[@ryanwalder](https://github.com/ryanwalder)|1 28 | @mioux|[@mioux](https://github.com/mioux)|1 29 | @abednarik|[@abednarik](https://github.com/abednarik)|1 30 | @sticky-note|[@sticky-note](https://github.com/sticky-note)|1 31 | 32 | --- 33 | 34 | Auto-generated by a [forked version](https://github.com/myii/maintainer) of [gaocegege/maintainer](https://github.com/gaocegege/maintainer) on 2021-06-24. 35 | -------------------------------------------------------------------------------- /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 | - 52 19 | * - :raw-html-m2r:`@syndicut` 20 | - `@syndicut `_ 21 | - 10 22 | * - :raw-html-m2r:`@iggy` 23 | - `@iggy `_ 24 | - 3 25 | * - :raw-html-m2r:`@dafyddj` 26 | - `@dafyddj `_ 27 | - 3 28 | * - :raw-html-m2r:`@javierbertoli` 29 | - `@javierbertoli `_ 30 | - 3 31 | * - :raw-html-m2r:`@aboe76` 32 | - `@aboe76 `_ 33 | - 3 34 | * - :raw-html-m2r:`@nmadhok` 35 | - `@nmadhok `_ 36 | - 3 37 | * - :raw-html-m2r:`@0xf10e` 38 | - `@0xf10e `_ 39 | - 3 40 | * - :raw-html-m2r:`@melipharo` 41 | - `@melipharo `_ 42 | - 2 43 | * - :raw-html-m2r:`@daks` 44 | - `@daks `_ 45 | - 2 46 | * - :raw-html-m2r:`@pprkut` 47 | - `@pprkut `_ 48 | - 2 49 | * - :raw-html-m2r:`@noelmcloughlin` 50 | - `@noelmcloughlin `_ 51 | - 2 52 | * - :raw-html-m2r:`@babilen5` 53 | - `@babilen5 `_ 54 | - 2 55 | * - :raw-html-m2r:`@roedie` 56 | - `@roedie `_ 57 | - 2 58 | * - :raw-html-m2r:`@bmwiedemann` 59 | - `@bmwiedemann `_ 60 | - 1 61 | * - :raw-html-m2r:`@baby-gnu` 62 | - `@baby-gnu `_ 63 | - 1 64 | * - :raw-html-m2r:`@gravyboat` 65 | - `@gravyboat `_ 66 | - 1 67 | * - :raw-html-m2r:`@aphor` 68 | - `@aphor `_ 69 | - 1 70 | * - :raw-html-m2r:`@jcftang` 71 | - `@jcftang `_ 72 | - 1 73 | * - :raw-html-m2r:`@norwoodj` 74 | - `@norwoodj `_ 75 | - 1 76 | * - :raw-html-m2r:`@ryanwalder` 77 | - `@ryanwalder `_ 78 | - 1 79 | * - :raw-html-m2r:`@mioux` 80 | - `@mioux `_ 81 | - 1 82 | * - :raw-html-m2r:`@abednarik` 83 | - `@abednarik `_ 84 | - 1 85 | * - :raw-html-m2r:`@sticky-note` 86 | - `@sticky-note `_ 87 | - 1 88 | 89 | 90 | ---- 91 | 92 | Auto-generated by a `forked version `_ of `gaocegege/maintainer `_ on 2021-06-24. 93 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## [0.12.1](https://github.com/saltstack-formulas/nfs-formula/compare/v0.12.0...v0.12.1) (2021-06-24) 4 | 5 | 6 | ### Bug Fixes 7 | 8 | * **osfamilymap:** fix no `grains.init` on *BSD ([53b5b39](https://github.com/saltstack-formulas/nfs-formula/commit/53b5b39f250e82c04ff02e6e9a6b0d203349cb54)), closes [#38](https://github.com/saltstack-formulas/nfs-formula/issues/38) 9 | 10 | 11 | ### Continuous Integration 12 | 13 | * enable Vagrant-based testing using GitHub Actions ([8b7a927](https://github.com/saltstack-formulas/nfs-formula/commit/8b7a927a0188b71242280d49ee65c622108a72d9)) 14 | * **kitchen+gitlab:** remove Ubuntu 16.04 & Fedora 32 (EOL) [skip ci] ([f912cb6](https://github.com/saltstack-formulas/nfs-formula/commit/f912cb6272c6ab29951e8227fa2bcf5c19cf431b)) 15 | * add `arch-master` to matrix and update `.travis.yml` [skip ci] ([dc8ee52](https://github.com/saltstack-formulas/nfs-formula/commit/dc8ee52e89e4fcbb2cc01d458b64290ed05b72b6)) 16 | * **kitchen+gitlab:** adjust matrix to add `3003` [skip ci] ([20db001](https://github.com/saltstack-formulas/nfs-formula/commit/20db00170866ee1dfb3cce7240032eaeaba55bc0)) 17 | 18 | # [0.12.0](https://github.com/saltstack-formulas/nfs-formula/compare/v0.11.1...v0.12.0) (2021-04-03) 19 | 20 | 21 | ### Code Refactoring 22 | 23 | * **service:** split out nfs service handling into dedicated state ([ad8d4b8](https://github.com/saltstack-formulas/nfs-formula/commit/ad8d4b89dc1f20d8bb02abcfbd2e98e2d0395317)) 24 | 25 | 26 | ### Continuous Integration 27 | 28 | * **commitlint:** ensure `upstream/master` uses main repo URL [skip ci] ([3d81fea](https://github.com/saltstack-formulas/nfs-formula/commit/3d81feaab31734c149c50d59b2a057e62e8463af)) 29 | * **gemfile+lock:** use `ssf` customised `kitchen-docker` repo [skip ci] ([be724ae](https://github.com/saltstack-formulas/nfs-formula/commit/be724aed004193eb45a0b94c7a1274cb1a6aa227)) 30 | * **gitlab-ci:** add `rubocop` linter (with `allow_failure`) [skip ci] ([e0274da](https://github.com/saltstack-formulas/nfs-formula/commit/e0274daa9acc2b069ceb9f3a77c2a630ed4cfa34)) 31 | * **gitlab-ci:** use GitLab CI as Travis CI replacement ([4405b21](https://github.com/saltstack-formulas/nfs-formula/commit/4405b2151768067098c1431007416db65daf36f7)) 32 | * **kitchen+ci:** use latest pre-salted images (after CVE) [skip ci] ([8ef3472](https://github.com/saltstack-formulas/nfs-formula/commit/8ef34725eb0cffae615d47346238c624ee104880)) 33 | * **kitchen+gitlab-ci:** use latest pre-salted images [skip ci] ([ef34ebb](https://github.com/saltstack-formulas/nfs-formula/commit/ef34ebba22b3f5255dec3c1faeb3e877982b87b6)) 34 | * **pre-commit:** add to formula [skip ci] ([b4b0896](https://github.com/saltstack-formulas/nfs-formula/commit/b4b0896979895c82be592ae3f0232647d8580521)) 35 | * **pre-commit:** enable/disable `rstcheck` as relevant [skip ci] ([def21c3](https://github.com/saltstack-formulas/nfs-formula/commit/def21c3ba004e806e7ac4aa608ab05efdeae06fe)) 36 | * **pre-commit:** finalise `rstcheck` configuration [skip ci] ([6bea9ea](https://github.com/saltstack-formulas/nfs-formula/commit/6bea9eaedde9b1b29f56f15ec080649a405691a1)) 37 | * **pre-commit:** update hook for `rubocop` [skip ci] ([c298c9a](https://github.com/saltstack-formulas/nfs-formula/commit/c298c9a7cecfb15213441105d9f83cd47e7cb621)) 38 | 39 | 40 | ### Features 41 | 42 | * **oscodenamemap:** add support for openSUSE Tumbleweed ([5c30f49](https://github.com/saltstack-formulas/nfs-formula/commit/5c30f49cef7c20a76201505550ad9976822fa61b)) 43 | * **osfamilymap:** add support for Gentoo ([aae6ce6](https://github.com/saltstack-formulas/nfs-formula/commit/aae6ce6414fc077c65b96c8f55e519863e8a5ed7)) 44 | * **service:** allow disabling of nfs services ([2bfffc0](https://github.com/saltstack-formulas/nfs-formula/commit/2bfffc06a919546ae5775010ba4e33a5e200938b)) 45 | 46 | 47 | ### Tests 48 | 49 | * standardise use of `share` suite & `_mapdata` state [skip ci] ([b3d113a](https://github.com/saltstack-formulas/nfs-formula/commit/b3d113a49eef5b459aa83a12881a888f83a0dc2c)) 50 | 51 | ## [0.11.1](https://github.com/saltstack-formulas/nfs-formula/compare/v0.11.0...v0.11.1) (2020-07-06) 52 | 53 | 54 | ### Bug Fixes 55 | 56 | * **null:** replace `None` with null in yaml files ([88a3c54](https://github.com/saltstack-formulas/nfs-formula/commit/88a3c544cca607c22b661c4d59df3012cc21208d)) 57 | 58 | 59 | ### Continuous Integration 60 | 61 | * **gemfile:** restrict `train` gem version until upstream fix [skip ci] ([c8c240f](https://github.com/saltstack-formulas/nfs-formula/commit/c8c240f300b5e59913bfd0be039a59fe460ad2b3)) 62 | * **gemfile.lock:** add to repo with updated `Gemfile` [skip ci] ([5f3dc36](https://github.com/saltstack-formulas/nfs-formula/commit/5f3dc366f38cd0759eff9f2b4ff1e5546dd19d65)) 63 | * **kitchen:** avoid using bootstrap for `master` instances [skip ci] ([a0f3722](https://github.com/saltstack-formulas/nfs-formula/commit/a0f372258bdf9c1e55ef0d24442d9088ca576999)) 64 | * **kitchen:** use `saltimages` Docker Hub where available [skip ci] ([c8ae973](https://github.com/saltstack-formulas/nfs-formula/commit/c8ae973a61a933453e0b769233cef3d2355b1cc0)) 65 | * **kitchen+travis:** remove `master-py2-arch-base-latest` [skip ci] ([26cf881](https://github.com/saltstack-formulas/nfs-formula/commit/26cf881085950553d6ccb28a19100e22ac438cb8)) 66 | * **travis:** add notifications => zulip [skip ci] ([c1d4ce0](https://github.com/saltstack-formulas/nfs-formula/commit/c1d4ce0d7b4da976b241506df29b6f992afa7cf9)) 67 | * **travis:** quote pathspecs used with `git ls-files` [skip ci] ([c15158b](https://github.com/saltstack-formulas/nfs-formula/commit/c15158b1ec0aebbd249c5cddfa7e1ee2d0e88679)) 68 | * **travis:** run `shellcheck` during lint job [skip ci] ([5efc351](https://github.com/saltstack-formulas/nfs-formula/commit/5efc35189d6da8440e4822cf3ea7af8e91b463e3)) 69 | * **travis:** use `major.minor` for `semantic-release` version [skip ci] ([a20ce32](https://github.com/saltstack-formulas/nfs-formula/commit/a20ce32841077e418b0e15155c081b4014e9a9a1)) 70 | * **workflows/commitlint:** add to repo [skip ci] ([26bc2b4](https://github.com/saltstack-formulas/nfs-formula/commit/26bc2b410cbc5b9bd3b48e771dc4149e481f127f)) 71 | * workaround issues with newly introduced `amazonlinux-1` [skip ci] ([da5453c](https://github.com/saltstack-formulas/nfs-formula/commit/da5453c87bd2d98a2d191f11ec4f9906d6cce2bf)) 72 | 73 | # [0.11.0](https://github.com/saltstack-formulas/nfs-formula/compare/v0.10.0...v0.11.0) (2019-11-20) 74 | 75 | 76 | ### Bug Fixes 77 | 78 | * **map.jinja:** add missing reference to `osfinger` grain ([d56f55e](https://github.com/saltstack-formulas/nfs-formula/commit/d56f55e6cafb88f5f6f5012eda1e50a304684362)) 79 | * **osfingermap:** update `service_name` for `CentOS-6` ([780c062](https://github.com/saltstack-formulas/nfs-formula/commit/780c0622284c98464a65a7f7cba3660b5ef94cbd)) 80 | * **osmap:** update `service_name` for current versions of Fedora ([2731708](https://github.com/saltstack-formulas/nfs-formula/commit/27317085f7f5435fd11cbe8351802ce66bb2df99)) 81 | 82 | 83 | ### Continuous Integration 84 | 85 | * **travis:** finalise enabled instances ([1255431](https://github.com/saltstack-formulas/nfs-formula/commit/1255431d0d2a2ede0a7696a13710fb67df52c680)) 86 | 87 | 88 | ### Features 89 | 90 | * implementing semantic release ([ad826bc](https://github.com/saltstack-formulas/nfs-formula/commit/ad826bc23ef2b576ba298ea81007357cfd0a5d63)) 91 | 92 | 93 | ### Styles 94 | 95 | * fix linters errors ([18acd66](https://github.com/saltstack-formulas/nfs-formula/commit/18acd667c0299a7a9438d57f5f7d120df2841125)) 96 | -------------------------------------------------------------------------------- /docs/CHANGELOG.rst: -------------------------------------------------------------------------------- 1 | 2 | Changelog 3 | ========= 4 | 5 | `0.12.1 `_ (2021-06-24) 6 | -------------------------------------------------------------------------------------------------------- 7 | 8 | Bug Fixes 9 | ^^^^^^^^^ 10 | 11 | 12 | * **osfamilymap:** fix no ``grains.init`` on *BSD (\ `53b5b39 `_\ ), closes `#38 `_ 13 | 14 | Continuous Integration 15 | ^^^^^^^^^^^^^^^^^^^^^^ 16 | 17 | 18 | * enable Vagrant-based testing using GitHub Actions (\ `8b7a927 `_\ ) 19 | * **kitchen+gitlab:** remove Ubuntu 16.04 & Fedora 32 (EOL) [skip ci] (\ `f912cb6 `_\ ) 20 | * add ``arch-master`` to matrix and update ``.travis.yml`` [skip ci] (\ `dc8ee52 `_\ ) 21 | * **kitchen+gitlab:** adjust matrix to add ``3003`` [skip ci] (\ `20db001 `_\ ) 22 | 23 | `0.12.0 `_ (2021-04-03) 24 | -------------------------------------------------------------------------------------------------------- 25 | 26 | Code Refactoring 27 | ^^^^^^^^^^^^^^^^ 28 | 29 | 30 | * **service:** split out nfs service handling into dedicated state (\ `ad8d4b8 `_\ ) 31 | 32 | Continuous Integration 33 | ^^^^^^^^^^^^^^^^^^^^^^ 34 | 35 | 36 | * **commitlint:** ensure ``upstream/master`` uses main repo URL [skip ci] (\ `3d81fea `_\ ) 37 | * **gemfile+lock:** use ``ssf`` customised ``kitchen-docker`` repo [skip ci] (\ `be724ae `_\ ) 38 | * **gitlab-ci:** add ``rubocop`` linter (with ``allow_failure``\ ) [skip ci] (\ `e0274da `_\ ) 39 | * **gitlab-ci:** use GitLab CI as Travis CI replacement (\ `4405b21 `_\ ) 40 | * **kitchen+ci:** use latest pre-salted images (after CVE) [skip ci] (\ `8ef3472 `_\ ) 41 | * **kitchen+gitlab-ci:** use latest pre-salted images [skip ci] (\ `ef34ebb `_\ ) 42 | * **pre-commit:** add to formula [skip ci] (\ `b4b0896 `_\ ) 43 | * **pre-commit:** enable/disable ``rstcheck`` as relevant [skip ci] (\ `def21c3 `_\ ) 44 | * **pre-commit:** finalise ``rstcheck`` configuration [skip ci] (\ `6bea9ea `_\ ) 45 | * **pre-commit:** update hook for ``rubocop`` [skip ci] (\ `c298c9a `_\ ) 46 | 47 | Features 48 | ^^^^^^^^ 49 | 50 | 51 | * **oscodenamemap:** add support for openSUSE Tumbleweed (\ `5c30f49 `_\ ) 52 | * **osfamilymap:** add support for Gentoo (\ `aae6ce6 `_\ ) 53 | * **service:** allow disabling of nfs services (\ `2bfffc0 `_\ ) 54 | 55 | Tests 56 | ^^^^^ 57 | 58 | 59 | * standardise use of ``share`` suite & ``_mapdata`` state [skip ci] (\ `b3d113a `_\ ) 60 | 61 | `0.11.1 `_ (2020-07-06) 62 | -------------------------------------------------------------------------------------------------------- 63 | 64 | Bug Fixes 65 | ^^^^^^^^^ 66 | 67 | 68 | * **null:** replace ``None`` with null in yaml files (\ `88a3c54 `_\ ) 69 | 70 | Continuous Integration 71 | ^^^^^^^^^^^^^^^^^^^^^^ 72 | 73 | 74 | * **gemfile:** restrict ``train`` gem version until upstream fix [skip ci] (\ `c8c240f `_\ ) 75 | * **gemfile.lock:** add to repo with updated ``Gemfile`` [skip ci] (\ `5f3dc36 `_\ ) 76 | * **kitchen:** avoid using bootstrap for ``master`` instances [skip ci] (\ `a0f3722 `_\ ) 77 | * **kitchen:** use ``saltimages`` Docker Hub where available [skip ci] (\ `c8ae973 `_\ ) 78 | * **kitchen+travis:** remove ``master-py2-arch-base-latest`` [skip ci] (\ `26cf881 `_\ ) 79 | * **travis:** add notifications => zulip [skip ci] (\ `c1d4ce0 `_\ ) 80 | * **travis:** quote pathspecs used with ``git ls-files`` [skip ci] (\ `c15158b `_\ ) 81 | * **travis:** run ``shellcheck`` during lint job [skip ci] (\ `5efc351 `_\ ) 82 | * **travis:** use ``major.minor`` for ``semantic-release`` version [skip ci] (\ `a20ce32 `_\ ) 83 | * **workflows/commitlint:** add to repo [skip ci] (\ `26bc2b4 `_\ ) 84 | * workaround issues with newly introduced ``amazonlinux-1`` [skip ci] (\ `da5453c `_\ ) 85 | 86 | `0.11.0 `_ (2019-11-20) 87 | -------------------------------------------------------------------------------------------------------- 88 | 89 | Bug Fixes 90 | ^^^^^^^^^ 91 | 92 | 93 | * **map.jinja:** add missing reference to ``osfinger`` grain (\ `d56f55e `_\ ) 94 | * **osfingermap:** update ``service_name`` for ``CentOS-6`` (\ `780c062 `_\ ) 95 | * **osmap:** update ``service_name`` for current versions of Fedora (\ `2731708 `_\ ) 96 | 97 | Continuous Integration 98 | ^^^^^^^^^^^^^^^^^^^^^^ 99 | 100 | 101 | * **travis:** finalise enabled instances (\ `1255431 `_\ ) 102 | 103 | Features 104 | ^^^^^^^^ 105 | 106 | 107 | * implementing semantic release (\ `ad826bc `_\ ) 108 | 109 | Styles 110 | ^^^^^^ 111 | 112 | 113 | * fix linters errors (\ `18acd66 `_\ ) 114 | -------------------------------------------------------------------------------- /.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/nfs-formula' 180 | urls: 181 | - https://saltstack-formulas.zulipchat.com/api/v1/external/travis?api_key=HsIq3o5QmLxdnVCKF9is0FUIpkpAY79P&stream=CI&topic=saltstack-formulas%2Fnfs-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 | -------------------------------------------------------------------------------- /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: nfs 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 | - nfs._mapdata 276 | - nfs.server 277 | pillars: 278 | top.sls: 279 | base: 280 | '*': 281 | - nfs 282 | pillars_from_files: 283 | nfs.sls: pillar.example 284 | verifier: 285 | inspec_tests: 286 | - path: test/integration/default 287 | -------------------------------------------------------------------------------- /.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/nfs-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/nfs-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 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | -------------------------------------------------------------------------------- /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 | kitchen-vagrant (1.12.0) 392 | test-kitchen (>= 1.4, < 4) 393 | license-acceptance (2.1.13) 394 | pastel (~> 0.7) 395 | tomlrb (>= 1.2, < 3.0) 396 | tty-box (~> 0.6) 397 | tty-prompt (~> 0.20) 398 | little-plugger (1.1.4) 399 | logging (2.3.1) 400 | little-plugger (~> 1.1) 401 | multi_json (~> 1.14) 402 | memoist (0.16.2) 403 | method_source (1.0.0) 404 | mini_mime (1.1.2) 405 | minitest (5.16.2) 406 | mixlib-config (3.0.27) 407 | tomlrb 408 | mixlib-install (3.12.19) 409 | mixlib-shellout 410 | mixlib-versioning 411 | thor 412 | mixlib-log (3.0.9) 413 | mixlib-shellout (3.2.7) 414 | chef-utils 415 | mixlib-versioning (1.2.12) 416 | mongo (2.13.2) 417 | bson (>= 4.8.2, < 5.0.0) 418 | ms_rest (0.7.6) 419 | concurrent-ruby (~> 1.0) 420 | faraday (>= 0.9, < 2.0.0) 421 | timeliness (~> 0.3.10) 422 | ms_rest_azure (0.12.0) 423 | concurrent-ruby (~> 1.0) 424 | faraday (>= 0.9, < 2.0.0) 425 | faraday-cookie_jar (~> 0.0.6) 426 | ms_rest (~> 0.7.6) 427 | multi_json (1.15.0) 428 | multipart-post (2.2.3) 429 | net-scp (3.0.0) 430 | net-ssh (>= 2.6.5, < 7.0.0) 431 | net-ssh (6.1.0) 432 | net-ssh-gateway (2.0.0) 433 | net-ssh (>= 4.0.0) 434 | nori (2.6.0) 435 | options (2.3.2) 436 | os (1.1.4) 437 | parallel (1.22.1) 438 | parser (3.1.2.0) 439 | ast (~> 2.4.1) 440 | parslet (1.8.2) 441 | pastel (0.8.0) 442 | tty-color (~> 0.5) 443 | progress_bar (1.3.3) 444 | highline (>= 1.6, < 3) 445 | options (~> 2.3.0) 446 | pry (0.14.1) 447 | coderay (~> 1.1) 448 | method_source (~> 1.0) 449 | public_suffix (4.0.7) 450 | rainbow (3.1.1) 451 | rake (13.0.6) 452 | regexp_parser (2.5.0) 453 | representable (3.2.0) 454 | declarative (< 0.1.0) 455 | trailblazer-option (>= 0.1.1, < 0.2.0) 456 | uber (< 0.2.0) 457 | retriable (3.1.2) 458 | rexml (3.2.5) 459 | rspec (3.11.0) 460 | rspec-core (~> 3.11.0) 461 | rspec-expectations (~> 3.11.0) 462 | rspec-mocks (~> 3.11.0) 463 | rspec-core (3.11.0) 464 | rspec-support (~> 3.11.0) 465 | rspec-expectations (3.11.0) 466 | diff-lcs (>= 1.2.0, < 2.0) 467 | rspec-support (~> 3.11.0) 468 | rspec-its (1.3.0) 469 | rspec-core (>= 3.0.0) 470 | rspec-expectations (>= 3.0.0) 471 | rspec-mocks (3.11.1) 472 | diff-lcs (>= 1.2.0, < 2.0) 473 | rspec-support (~> 3.11.0) 474 | rspec-support (3.11.0) 475 | rubocop (1.25.1) 476 | parallel (~> 1.10) 477 | parser (>= 3.1.0.0) 478 | rainbow (>= 2.2.2, < 4.0) 479 | regexp_parser (>= 1.8, < 3.0) 480 | rexml 481 | rubocop-ast (>= 1.15.1, < 2.0) 482 | ruby-progressbar (~> 1.7) 483 | unicode-display_width (>= 1.4.0, < 3.0) 484 | rubocop-ast (1.19.1) 485 | parser (>= 3.1.1.0) 486 | ruby-progressbar (1.11.0) 487 | ruby2_keywords (0.0.5) 488 | rubyntlm (0.6.3) 489 | rubyzip (2.3.2) 490 | semverse (3.0.2) 491 | signet (0.17.0) 492 | addressable (~> 2.8) 493 | faraday (>= 0.17.5, < 3.a) 494 | jwt (>= 1.5, < 3.0) 495 | multi_json (~> 1.10) 496 | sslshake (1.3.1) 497 | strings (0.2.1) 498 | strings-ansi (~> 0.2) 499 | unicode-display_width (>= 1.5, < 3.0) 500 | unicode_utils (~> 1.4) 501 | strings-ansi (0.2.0) 502 | test-kitchen (3.3.1) 503 | bcrypt_pbkdf (~> 1.0) 504 | chef-utils (>= 16.4.35) 505 | ed25519 (~> 1.2) 506 | license-acceptance (>= 1.0.11, < 3.0) 507 | mixlib-install (~> 3.6) 508 | mixlib-shellout (>= 1.2, < 4.0) 509 | net-scp (>= 1.1, < 4.0) 510 | net-ssh (>= 2.9, < 7.0) 511 | net-ssh-gateway (>= 1.2, < 3.0) 512 | thor (>= 0.19, < 2.0) 513 | winrm (~> 2.0) 514 | winrm-elevated (~> 1.0) 515 | winrm-fs (~> 1.1) 516 | thor (1.2.1) 517 | timeliness (0.3.10) 518 | tomlrb (1.3.0) 519 | trailblazer-option (0.1.2) 520 | train (3.10.1) 521 | activesupport (>= 6.0.3.1) 522 | azure_graph_rbac (~> 0.16) 523 | azure_mgmt_key_vault (~> 0.17) 524 | azure_mgmt_resources (~> 0.15) 525 | azure_mgmt_security (~> 0.18) 526 | azure_mgmt_storage (~> 0.18) 527 | docker-api (>= 1.26, < 3.0) 528 | google-api-client (>= 0.23.9, <= 0.52.0) 529 | googleauth (>= 0.6.6, <= 0.14.0) 530 | inifile (~> 3.0) 531 | train-core (= 3.10.1) 532 | train-winrm (~> 0.2) 533 | train-aws (0.2.24) 534 | aws-sdk-alexaforbusiness (~> 1.0) 535 | aws-sdk-amplify (~> 1.32.0) 536 | aws-sdk-apigateway (~> 1.0) 537 | aws-sdk-apigatewayv2 (~> 1.0) 538 | aws-sdk-applicationautoscaling (>= 1.46, < 1.52) 539 | aws-sdk-athena (~> 1.0) 540 | aws-sdk-autoscaling (>= 1.22, < 1.64) 541 | aws-sdk-batch (>= 1.36, < 1.48) 542 | aws-sdk-budgets (~> 1.0) 543 | aws-sdk-cloudformation (~> 1.0) 544 | aws-sdk-cloudfront (~> 1.0) 545 | aws-sdk-cloudhsm (~> 1.0) 546 | aws-sdk-cloudhsmv2 (~> 1.0) 547 | aws-sdk-cloudtrail (~> 1.8) 548 | aws-sdk-cloudwatch (~> 1.13) 549 | aws-sdk-cloudwatchevents (>= 1.36, < 1.47) 550 | aws-sdk-cloudwatchlogs (~> 1.13) 551 | aws-sdk-codecommit (~> 1.0) 552 | aws-sdk-codedeploy (~> 1.0) 553 | aws-sdk-codepipeline (~> 1.0) 554 | aws-sdk-cognitoidentity (>= 1.26, < 1.32) 555 | aws-sdk-cognitoidentityprovider (>= 1.46, < 1.54) 556 | aws-sdk-configservice (~> 1.21) 557 | aws-sdk-core (~> 3.0) 558 | aws-sdk-costandusagereportservice (~> 1.6) 559 | aws-sdk-databasemigrationservice (>= 1.42, < 1.54) 560 | aws-sdk-dynamodb (~> 1.31) 561 | aws-sdk-ec2 (~> 1.70) 562 | aws-sdk-ecr (~> 1.18) 563 | aws-sdk-ecrpublic (~> 1.3) 564 | aws-sdk-ecs (~> 1.30) 565 | aws-sdk-efs (~> 1.0) 566 | aws-sdk-eks (~> 1.9) 567 | aws-sdk-elasticache (~> 1.0) 568 | aws-sdk-elasticbeanstalk (~> 1.0) 569 | aws-sdk-elasticloadbalancing (~> 1.8) 570 | aws-sdk-elasticloadbalancingv2 (~> 1.0) 571 | aws-sdk-elasticsearchservice (~> 1.0) 572 | aws-sdk-emr (~> 1.53.0) 573 | aws-sdk-eventbridge (~> 1.24.0) 574 | aws-sdk-firehose (~> 1.0) 575 | aws-sdk-glue (>= 1.71, < 1.89) 576 | aws-sdk-guardduty (~> 1.31) 577 | aws-sdk-iam (~> 1.13) 578 | aws-sdk-kafka (~> 1.0) 579 | aws-sdk-kinesis (~> 1.0) 580 | aws-sdk-kms (~> 1.13) 581 | aws-sdk-lambda (~> 1.0) 582 | aws-sdk-mq (~> 1.40.0) 583 | aws-sdk-networkfirewall (>= 1.6.0) 584 | aws-sdk-networkmanager (>= 1.13.0) 585 | aws-sdk-organizations (>= 1.17, < 1.60) 586 | aws-sdk-ram (>= 1.21, < 1.27) 587 | aws-sdk-rds (~> 1.43) 588 | aws-sdk-redshift (~> 1.0) 589 | aws-sdk-route53 (~> 1.0) 590 | aws-sdk-route53domains (~> 1.0) 591 | aws-sdk-route53resolver (~> 1.0) 592 | aws-sdk-s3 (~> 1.30) 593 | aws-sdk-s3control (~> 1.43.0) 594 | aws-sdk-secretsmanager (>= 1.42, < 1.47) 595 | aws-sdk-securityhub (~> 1.0) 596 | aws-sdk-servicecatalog (>= 1.48, < 1.61) 597 | aws-sdk-ses (~> 1.41.0) 598 | aws-sdk-shield (~> 1.30) 599 | aws-sdk-signer (~> 1.32.0) 600 | aws-sdk-simpledb (~> 1.29.0) 601 | aws-sdk-sms (~> 1.0) 602 | aws-sdk-sns (~> 1.9) 603 | aws-sdk-sqs (~> 1.10) 604 | aws-sdk-ssm (~> 1.0) 605 | aws-sdk-states (>= 1.35, < 1.40) 606 | aws-sdk-synthetics (~> 1.19.0) 607 | aws-sdk-transfer (>= 1.26, < 1.35) 608 | aws-sdk-waf (~> 1.43.0) 609 | train-core (3.10.1) 610 | addressable (~> 2.5) 611 | ffi (!= 1.13.0) 612 | json (>= 1.8, < 3.0) 613 | mixlib-shellout (>= 2.0, < 4.0) 614 | net-scp (>= 1.2, < 4.0) 615 | net-ssh (>= 2.9, < 7.0) 616 | train-habitat (0.2.22) 617 | train-winrm (0.2.13) 618 | winrm (>= 2.3.6, < 3.0) 619 | winrm-elevated (~> 1.2.2) 620 | winrm-fs (~> 1.0) 621 | tty-box (0.7.0) 622 | pastel (~> 0.8) 623 | strings (~> 0.2.0) 624 | tty-cursor (~> 0.7) 625 | tty-color (0.6.0) 626 | tty-cursor (0.7.1) 627 | tty-prompt (0.23.1) 628 | pastel (~> 0.8) 629 | tty-reader (~> 0.8) 630 | tty-reader (0.9.0) 631 | tty-cursor (~> 0.7) 632 | tty-screen (~> 0.8) 633 | wisper (~> 2.0) 634 | tty-screen (0.8.1) 635 | tty-table (0.12.0) 636 | pastel (~> 0.8) 637 | strings (~> 0.2.0) 638 | tty-screen (~> 0.8) 639 | tzinfo (2.0.4) 640 | concurrent-ruby (~> 1.0) 641 | uber (0.1.0) 642 | unf (0.1.4) 643 | unf_ext 644 | unf_ext (0.0.8.2) 645 | unicode-display_width (2.2.0) 646 | unicode_utils (1.4.0) 647 | winrm (2.3.6) 648 | builder (>= 2.1.2) 649 | erubi (~> 1.8) 650 | gssapi (~> 1.2) 651 | gyoku (~> 1.0) 652 | httpclient (~> 2.2, >= 2.2.0.2) 653 | logging (>= 1.6.1, < 3.0) 654 | nori (~> 2.0) 655 | rubyntlm (~> 0.6.0, >= 0.6.3) 656 | winrm-elevated (1.2.3) 657 | erubi (~> 1.8) 658 | winrm (~> 2.0) 659 | winrm-fs (~> 1.0) 660 | winrm-fs (1.3.5) 661 | erubi (~> 1.8) 662 | logging (>= 1.6.1, < 3.0) 663 | rubyzip (~> 2.0) 664 | winrm (~> 2.0) 665 | wisper (2.0.1) 666 | 667 | PLATFORMS 668 | ruby 669 | 670 | DEPENDENCIES 671 | inspec! 672 | kitchen-docker! 673 | kitchen-inspec (>= 2.5.0) 674 | kitchen-salt (>= 0.7.2) 675 | kitchen-vagrant 676 | 677 | BUNDLED WITH 678 | 2.1.2 679 | --------------------------------------------------------------------------------