From 754cbc05781938d2c00a3e07d1fbfda006d2c7c3 Mon Sep 17 00:00:00 2001 From: Daniel Carabas Date: Mon, 15 Mar 2021 18:45:25 +0200 Subject: [PATCH 01/12] Replace Travis and Appveyor with Github Actions --- .github/workflows/auto_release.yml | 8 +- .github/workflows/nightly.yml | 30 ++++--- .github/workflows/pr_test.yml | 29 ++++--- .github/workflows/release.yml | 47 +++++++++++ .github/workflows/spec.yml | 128 +++++++++++++++++++++++++++++ .pdkignore | 1 + .sync.yml | 32 ++------ .travis.yml | 89 -------------------- metadata.json | 2 +- spec/spec_helper.rb | 4 + 10 files changed, 232 insertions(+), 138 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/spec.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/auto_release.yml b/.github/workflows/auto_release.yml index a88b99ca1..affeca907 100644 --- a/.github/workflows/auto_release.yml +++ b/.github/workflows/auto_release.yml @@ -36,7 +36,7 @@ jobs: persist-credentials: false - name: "PDK Release prep" - uses: docker://puppet/pdk:nightly + uses: docker://puppet/iac_release:ci with: args: 'release prep --force' env: @@ -46,12 +46,12 @@ jobs: if: ${{ github.repository_owner == 'puppetlabs' }} id: gv run: | - echo "::set-output name=ver::$(cat metadata.json | jq .version | tr -d \")" + echo "::set-output name=ver::$(jq --raw-output .version metadata.json)" - name: "Commit changes" if: ${{ github.repository_owner == 'puppetlabs' }} run: | - git config --local user.email "action@github.com" + git config --local user.email "${{ github.repository_owner }}@users.noreply.github.com" git config --local user.name "GitHub Action" git add . git commit -m "Release prep v${{ steps.gv.outputs.ver }}" @@ -66,7 +66,7 @@ jobs: branch: "release-prep" delete-branch: true title: "Release prep v${{ steps.gv.outputs.ver }}" - body: "Automated release-prep through [pdk-templates](https://github.com/puppetlabs/pdk-templates/blob/main/moduleroot/.github/workflows/auto_release.yml.erb)" + body: "Automated release-prep through [pdk-templates](https://github.com/puppetlabs/pdk-templates/blob/main/moduleroot/.github/workflows/auto_release.yml.erb) from commit ${{ github.sha }}" labels: "maintenance" - name: PR outputs diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 0c1fd28b9..865578cfd 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -58,7 +58,7 @@ jobs: if: ${{ github.repository_owner == 'puppetlabs' }} run: | if [ '${{ github.repository_owner }}' == 'puppetlabs' ]; then - buildevents cmd $TRACE_ID $STEP_ID matrix_from_metadata -- bundle exec matrix_from_metadata + buildevents cmd $TRACE_ID $STEP_ID matrix_from_metadata -- bundle exec matrix_from_metadata_v2 else echo "::set-output name=matrix::{}" fi @@ -69,6 +69,7 @@ jobs: buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Test Matrix' Acceptance: + name: "${{matrix.platforms.label}}, ${{matrix.collection}}" needs: - setup_matrix @@ -82,8 +83,10 @@ jobs: steps: - run: | - echo 'platform=${{ matrix.platform }}' >> $BUILDEVENT_FILE + echo 'platform=${{ matrix.platforms.image }}' >> $BUILDEVENT_FILE echo 'collection=${{ matrix.collection }}' >> $BUILDEVENT_FILE + echo 'label=${{ matrix.platforms.label }}' >> $BUILDEVENT_FILE + - name: "Honeycomb: Start recording" uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1 @@ -91,11 +94,11 @@ jobs: apikey: ${{ env.HONEYCOMB_WRITEKEY }} dataset: ${{ env.HONEYCOMB_DATASET }} job-status: ${{ job.status }} - matrix-key: ${{ matrix.platform }}-${{ matrix.collection }} + matrix-key: ${{ matrix.platforms.label }}-${{ matrix.collection }} - name: "Honeycomb: start first step" run: | - echo STEP_ID=${{ matrix.platform }}-${{ matrix.collection }}-1 >> $GITHUB_ENV + echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-1 >> $GITHUB_ENV echo STEP_START=$(date +%s) >> $GITHUB_ENV - name: Checkout Source @@ -117,18 +120,25 @@ jobs: if: ${{ always() }} run: | buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Environment' - echo STEP_ID=${{ matrix.platform }}-${{ matrix.collection }}-2 >> $GITHUB_ENV + echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-2 >> $GITHUB_ENV echo STEP_START=$(date +%s) >> $GITHUB_ENV - name: Provision test environment run: | - buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:provision ${{ matrix.platform }}' -- bundle exec rake 'litmus:provision[provision::provision_service,${{ matrix.platform }}]' + buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:provision ${{ matrix.platforms.image }}' -- bundle exec rake 'litmus:provision[${{matrix.platforms.provider}},${{ matrix.platforms.image }}]' echo ::group::=== REQUEST === cat request.json || true echo echo ::endgroup:: echo ::group::=== INVENTORY === - sed -e 's/password: .*/password: "[redacted]"/' < inventory.yaml || true + if [ -f 'spec/fixtures/litmus_inventory.yaml' ]; + then + FILE='spec/fixtures/litmus_inventory.yaml' + elif [ -f 'inventory.yaml' ]; + then + FILE='inventory.yaml' + fi + sed -e 's/password: .*/password: "[redacted]"/' < $FILE || true echo ::endgroup:: - name: Install agent @@ -144,7 +154,7 @@ jobs: run: | echo ::group::honeycomb step buildevents step $TRACE_ID $STEP_ID $STEP_START 'Deploy test system' - echo STEP_ID=${{ matrix.platform }}-${{ matrix.collection }}-3 >> $GITHUB_ENV + echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-3 >> $GITHUB_ENV echo STEP_START=$(date +%s) >> $GITHUB_ENV echo ::endgroup:: @@ -156,14 +166,14 @@ jobs: if: ${{ always() }} run: | buildevents step $TRACE_ID $STEP_ID $STEP_START 'Run acceptance tests' - echo STEP_ID=${{ matrix.platform }}-${{ matrix.collection }}-4 >> $GITHUB_ENV + echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-4 >> $GITHUB_ENV echo STEP_START=$(date +%s) >> $GITHUB_ENV - name: Remove test environment if: ${{ always() }} continue-on-error: true run: | - if [ -f inventory.yaml ]; then + if [[ -f inventory.yaml || -f spec/fixtures/litmus_inventory.yaml ]]; then buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:tear_down' -- bundle exec rake 'litmus:tear_down' echo ::group::=== REQUEST === cat request.json || true diff --git a/.github/workflows/pr_test.yml b/.github/workflows/pr_test.yml index 207dfcadd..69e414b55 100644 --- a/.github/workflows/pr_test.yml +++ b/.github/workflows/pr_test.yml @@ -55,7 +55,7 @@ jobs: id: get-matrix run: | if [ '${{ github.repository_owner }}' == 'puppetlabs' ]; then - buildevents cmd $TRACE_ID $STEP_ID matrix_from_metadata -- bundle exec matrix_from_metadata + buildevents cmd $TRACE_ID $STEP_ID matrix_from_metadata -- bundle exec matrix_from_metadata_v2 else echo "::set-output name=matrix::{}" fi @@ -66,6 +66,7 @@ jobs: buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Test Matrix' Acceptance: + name: "${{matrix.platforms.label}}, ${{matrix.collection}}" needs: - setup_matrix if: ${{ needs.setup_matrix.outputs.matrix != '{}' }} @@ -80,8 +81,9 @@ jobs: steps: - run: | - echo 'platform=${{ matrix.platform }}' >> $BUILDEVENT_FILE + echo 'platform=${{ matrix.platforms.image }}' >> $BUILDEVENT_FILE echo 'collection=${{ matrix.collection }}' >> $BUILDEVENT_FILE + echo 'label=${{ matrix.platforms.label }}' >> $BUILDEVENT_FILE - name: "Honeycomb: Start recording" uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1 @@ -89,11 +91,11 @@ jobs: apikey: ${{ env.HONEYCOMB_WRITEKEY }} dataset: ${{ env.HONEYCOMB_DATASET }} job-status: ${{ job.status }} - matrix-key: ${{ matrix.platform }}-${{ matrix.collection }} + matrix-key: ${{ matrix.platforms.label }}-${{ matrix.collection }} - name: "Honeycomb: start first step" run: | - echo STEP_ID=${{ matrix.platform }}-${{ matrix.collection }}-1 >> $GITHUB_ENV + echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-1 >> $GITHUB_ENV echo STEP_START=$(date +%s) >> $GITHUB_ENV - name: Checkout Source @@ -115,18 +117,25 @@ jobs: if: ${{ always() }} run: | buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Environment' - echo STEP_ID=${{ matrix.platform }}-${{ matrix.collection }}-2 >> $GITHUB_ENV + echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-2 >> $GITHUB_ENV echo STEP_START=$(date +%s) >> $GITHUB_ENV - name: Provision test environment run: | - buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:provision ${{ matrix.platform }}' -- bundle exec rake 'litmus:provision[provision::provision_service,${{ matrix.platform }}]' + buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:provision ${{ matrix.platforms.image }}' -- bundle exec rake 'litmus:provision[${{matrix.platforms.provider}},${{ matrix.platforms.image }}]' echo ::group::=== REQUEST === cat request.json || true echo echo ::endgroup:: echo ::group::=== INVENTORY === - sed -e 's/password: .*/password: "[redacted]"/' < inventory.yaml || true + if [ -f 'spec/fixtures/litmus_inventory.yaml' ]; + then + FILE='spec/fixtures/litmus_inventory.yaml' + elif [ -f 'inventory.yaml' ]; + then + FILE='inventory.yaml' + fi + sed -e 's/password: .*/password: "[redacted]"/' < $FILE || true echo ::endgroup:: - name: Install agent @@ -142,7 +151,7 @@ jobs: run: | echo ::group::honeycomb step buildevents step $TRACE_ID $STEP_ID $STEP_START 'Deploy test system' - echo STEP_ID=${{ matrix.platform }}-${{ matrix.collection }}-3 >> $GITHUB_ENV + echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-3 >> $GITHUB_ENV echo STEP_START=$(date +%s) >> $GITHUB_ENV echo ::endgroup:: @@ -154,14 +163,14 @@ jobs: if: ${{ always() }} run: | buildevents step $TRACE_ID $STEP_ID $STEP_START 'Run acceptance tests' - echo STEP_ID=${{ matrix.platform }}-${{ matrix.collection }}-4 >> $GITHUB_ENV + echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-4 >> $GITHUB_ENV echo STEP_START=$(date +%s) >> $GITHUB_ENV - name: Remove test environment if: ${{ always() }} continue-on-error: true run: | - if [ -f inventory.yaml ]; then + if [[ -f inventory.yaml || -f spec/fixtures/litmus_inventory.yaml ]]; then buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:tear_down' -- bundle exec rake 'litmus:tear_down' echo ::group::=== REQUEST === cat request.json || true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..1509f6e91 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,47 @@ +name: "Publish module" + +on: + workflow_dispatch: + +jobs: + create-github-release: + name: Deploy GitHub Release + runs-on: ubuntu-20.04 + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + ref: ${{ github.ref }} + clean: true + fetch-depth: 0 + - name: Get Version + id: gv + run: | + echo "::set-output name=ver::$(jq --raw-output .version metadata.json)" + - name: Create Release + uses: actions/create-release@v1 + id: create_release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: "v${{ steps.gv.outputs.ver }}" + draft: false + prerelease: false + + deploy-forge: + name: Deploy to Forge + runs-on: ubuntu-20.04 + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + ref: ${{ github.ref }} + clean: true + - name: "PDK Build" + uses: docker://puppet/pdk:nightly + with: + args: 'build' + - name: "Push to Forge" + uses: docker://puppet/pdk:nightly + with: + args: 'release publish --forge-token ${{ secrets.FORGE_API_KEY }} --force' diff --git a/.github/workflows/spec.yml b/.github/workflows/spec.yml new file mode 100644 index 000000000..03e2cb8d3 --- /dev/null +++ b/.github/workflows/spec.yml @@ -0,0 +1,128 @@ +name: "Spec Tests" + +on: + schedule: + - cron: '0 0 * * *' + workflow_dispatch: + pull_request: + +env: + HONEYCOMB_WRITEKEY: 7f3c63a70eecc61d635917de46bea4e6 + HONEYCOMB_DATASET: litmus tests + +jobs: + setup_matrix: + name: "Setup Test Matrix" + runs-on: ubuntu-20.04 + outputs: + spec_matrix: ${{ steps.get-matrix.outputs.spec_matrix }} + + steps: + - name: "Honeycomb: Start recording" + uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1 + with: + apikey: ${{ env.HONEYCOMB_WRITEKEY }} + dataset: ${{ env.HONEYCOMB_DATASET }} + job-status: ${{ job.status }} + + - name: "Honeycomb: Start first step" + run: | + echo STEP_ID=setup-environment >> $GITHUB_ENV + echo STEP_START=$(date +%s) >> $GITHUB_ENV + + - name: Checkout Source + uses: actions/checkout@v2 + if: ${{ github.repository_owner == 'puppetlabs' }} + + - name: Activate Ruby 2.7 + uses: ruby/setup-ruby@v1 + if: ${{ github.repository_owner == 'puppetlabs' }} + with: + ruby-version: "2.7" + bundler-cache: true + + - name: Print bundle environment + if: ${{ github.repository_owner == 'puppetlabs' }} + run: | + echo ::group::bundler environment + buildevents cmd $TRACE_ID $STEP_ID 'bundle env' -- bundle env + echo ::endgroup:: + + - name: "Honeycomb: Record Setup Environment time" + if: ${{ github.repository_owner == 'puppetlabs' }} + run: | + buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Environment' + echo STEP_ID=Setup-Acceptance-Test-Matrix >> $GITHUB_ENV + echo STEP_START=$(date +%s) >> $GITHUB_ENV + + - name: Setup Spec Test Matrix + id: get-matrix + run: | + if [ '${{ github.repository_owner }}' == 'puppetlabs' ]; then + buildevents cmd $TRACE_ID $STEP_ID matrix_from_metadata -- bundle exec matrix_from_metadata_v2 + else + echo "::set-output name=spec_matrix::{}" + fi + + - name: "Honeycomb: Record Setup Test Matrix time" + if: ${{ always() }} + run: | + buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Test Matrix' + + Spec: + name: "Spec Tests (Puppet: ${{matrix.puppet_version}}, Ruby Ver: ${{matrix.ruby_version}})" + needs: + - setup_matrix + if: ${{ needs.setup_matrix.outputs.spec_matrix != '{}' }} + + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: ${{fromJson(needs.setup_matrix.outputs.spec_matrix)}} + + env: + BUILDEVENT_FILE: '../buildevents.txt' + PUPPET_GEM_VERSION: ${{ matrix.puppet_version }} + + steps: + - run: | + echo "SANITIZED_PUPPET_VERSION=$(echo '${{ matrix.puppet_version }}' | sed 's/~> //g')" >> $GITHUB_ENV + + - run: | + echo 'puppet_version=${{ env.SANITIZED_PUPPET_VERSION }}' >> $BUILDEVENT_FILE + + - name: "Honeycomb: Start first step" + run: | + echo "STEP_ID=${{ env.SANITIZED_PUPPET_VERSION }}-spec" >> $GITHUB_ENV + echo STEP_START=$(date +%s) >> $GITHUB_ENV + + - name: "Honeycomb: Start recording" + uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1 + with: + apikey: ${{ env.HONEYCOMB_WRITEKEY }} + dataset: ${{ env.HONEYCOMB_DATASET }} + job-status: ${{ job.status }} + matrix-key: ${{ env.SANITIZED_PUPPET_VERSION }} + + - name: Checkout Source + uses: actions/checkout@v2 + + - name: "Activate Ruby ${{ matrix.ruby_version }}" + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{matrix.ruby_version}} + bundler-cache: true + + - name: Print bundle environment + run: | + echo ::group::bundler environment + buildevents cmd $TRACE_ID $STEP_ID 'bundle env' -- bundle env + echo ::endgroup:: + + - name: Run Static & Syntax Tests + run: | + buildevents cmd $TRACE_ID $STEP_ID 'static_syntax_checks Puppet ${{ matrix.puppet_version }}, Ruby ${{ matrix.ruby_version }}' -- bundle exec rake syntax lint metadata_lint check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop + + - name: Run parallel_spec tests + run: | + buildevents cmd $TRACE_ID $STEP_ID 'rake parallel_spec Puppet ${{ matrix.puppet_version }}, Ruby ${{ matrix.ruby_version }}' -- bundle exec rake parallel_spec diff --git a/.pdkignore b/.pdkignore index 254808c8f..a74c4c4f3 100644 --- a/.pdkignore +++ b/.pdkignore @@ -42,3 +42,4 @@ /spec/ /.vscode/ /.sync.yml +/.devcontainer/ diff --git a/.sync.yml b/.sync.yml index 1a3cff456..6d40ffbf6 100644 --- a/.sync.yml +++ b/.sync.yml @@ -1,32 +1,9 @@ --- ".gitlab-ci.yml": delete: true -".travis.yml": - global_env: - - HONEYCOMB_WRITEKEY="7f3c63a70eecc61d635917de46bea4e6",HONEYCOMB_DATASET="litmus tests" - deploy_to_forge: - enabled: false - branches: - - release - use_litmus: true - litmus: - provision_list: - - ---travis_el - - travis_deb - - travis_el7 - - travis_el8 - complex: - - collection: - puppet_collection: - - puppet6 - provision_list: - - travis_ub_6 - simplecov: true - notifications: - slack: - secure: XpBD602OXRZHSTDylzzx/OqpfThEJPbx0PLhXctWuES4GpW1EHWnyPgrliNOaJOh0Zb7qMrdaKWLOltfqPT5IanPd0XF7GbT8RrNeLTmLXqvHmC6dDqWxnvFvdSrGwqpj7s7Dbwl79nmszONRj1OlolPmJgY/2kGw88c71biaas= appveyor.yml: delete: true + Gemfile: optional: ":development": @@ -46,3 +23,10 @@ spec/spec_helper.rb: unmanaged: false .github/workflows/auto_release.yml: unmanaged: false +.github/workflows/spec.yml: + checks: 'syntax lint metadata_lint check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop' + unmanaged: false +.github/workflows/release.yml: + unmanaged: false +.travis.yml: + delete: true diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index baab97630..000000000 --- a/.travis.yml +++ /dev/null @@ -1,89 +0,0 @@ ---- -os: linux -dist: xenial -language: ruby -cache: bundler -before_install: - - bundle -v - - rm -f Gemfile.lock - - "# Update system gems if requested. This is useful to temporarily workaround troubles in the test runner" - - "# See https://github.com/puppetlabs/pdk-templates/commit/705154d5c437796b821691b707156e1b056d244f for an example of how this was used" - - "# Ignore exit code of SIGPIPE'd yes to not fail with shell's pipefail set" - - '[ -z "$RUBYGEMS_VERSION" ] || (yes || true) | gem update --system $RUBYGEMS_VERSION' - - gem --version - - bundle -v -script: - - 'SIMPLECOV=yes bundle exec rake $CHECK' -bundler_args: --without system_tests -rvm: - - 2.5.7 -env: - global: - - HONEYCOMB_WRITEKEY="7f3c63a70eecc61d635917de46bea4e6",HONEYCOMB_DATASET="litmus tests" -stages: - - static - - spec - - acceptance -jobs: - fast_finish: true - include: - - before_script: - - "bundle exec rake 'litmus:provision_list[travis_ub_6]'" - - "bundle exec rake 'litmus:install_agent[puppet6]'" - - "bundle exec rake litmus:install_module" - env: - PLATFORMS: travis_ub_6_puppet6 - BUNDLE_WITH: system_tests - rvm: 2.5.7 - script: ["travis_wait 45 bundle exec rake litmus:acceptance:parallel"] - services: docker - stage: acceptance - - before_script: - - "bundle exec rake 'litmus:provision_list[travis_deb]'" - - "bundle exec rake 'litmus:install_agent[puppet6]'" - - "bundle exec rake litmus:install_module" - env: - PLATFORMS: travis_deb_puppet6 - BUNDLE_WITH: system_tests - rvm: 2.5.7 - script: ["travis_wait 45 bundle exec rake litmus:acceptance:parallel"] - services: docker - stage: acceptance - - before_script: - - "bundle exec rake 'litmus:provision_list[travis_el7]'" - - "bundle exec rake 'litmus:install_agent[puppet6]'" - - "bundle exec rake litmus:install_module" - env: - PLATFORMS: travis_el7_puppet6 - BUNDLE_WITH: system_tests - rvm: 2.5.7 - script: ["travis_wait 45 bundle exec rake litmus:acceptance:parallel"] - services: docker - stage: acceptance - - before_script: - - "bundle exec rake 'litmus:provision_list[travis_el8]'" - - "bundle exec rake 'litmus:install_agent[puppet6]'" - - "bundle exec rake litmus:install_module" - env: - PLATFORMS: travis_el8_puppet6 - BUNDLE_WITH: system_tests - rvm: 2.5.7 - script: ["travis_wait 45 bundle exec rake litmus:acceptance:parallel"] - services: docker - stage: acceptance - - - env: CHECK="check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop syntax lint metadata_lint" - stage: static - - - env: PUPPET_GEM_VERSION="~> 6.0" CHECK=parallel_spec - rvm: 2.5.7 - stage: spec -branches: - only: - - main - - /^v\d/ - - release -notifications: - email: false - slack: - secure: XpBD602OXRZHSTDylzzx/OqpfThEJPbx0PLhXctWuES4GpW1EHWnyPgrliNOaJOh0Zb7qMrdaKWLOltfqPT5IanPd0XF7GbT8RrNeLTmLXqvHmC6dDqWxnvFvdSrGwqpj7s7Dbwl79nmszONRj1OlolPmJgY/2kGw88c71biaas= diff --git a/metadata.json b/metadata.json index 13acb65ae..fe88f6c2a 100644 --- a/metadata.json +++ b/metadata.json @@ -85,6 +85,6 @@ ], "description": "MySQL module", "template-url": "https://github.com/puppetlabs/pdk-templates#main", - "template-ref": "heads/main-0-g44cc7ed", + "template-ref": "heads/main-0-g7be43a3", "pdk-version": "1.18.1" } diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 4ee263f9e..ce79d90bd 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,5 +1,9 @@ # frozen_string_literal: true +RSpec.configure do |c| + c.mock_with :rspec +end + require 'puppetlabs_spec_helper/module_spec_helper' require 'rspec-puppet-facts' From 2852d9fd5c54c283734cfbbed97a10676c8bbdd1 Mon Sep 17 00:00:00 2001 From: daiana Date: Thu, 1 Apr 2021 11:32:16 +0300 Subject: [PATCH 02/12] Test --- spec/acceptance/types/mysql_grant_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/acceptance/types/mysql_grant_spec.rb b/spec/acceptance/types/mysql_grant_spec.rb index 76face412..bb7d60a25 100644 --- a/spec/acceptance/types/mysql_grant_spec.rb +++ b/spec/acceptance/types/mysql_grant_spec.rb @@ -369,12 +369,12 @@ class { 'mysql::server': user => "web@${dbSubnet}", require => Mysql_user["web@${dbSubnet}"], } - mysql_user { "web@${fqdn}": + mysql_user { "web@${::networking['ip']}": ensure => present, } - mysql_grant { "web@${fqdn}/*.*": - user => "web@${fqdn}", - require => Mysql_user["web@${fqdn}"], + mysql_grant { "web@${::networking['ip']}/*.*": + user => "web@${::networking['ip']}", + require => Mysql_user["web@${::networking['ip']}"], } mysql_user { 'web@localhost': ensure => present, From 40e18b4ebce0b4d527c2aab4876e4a25d7f2b778 Mon Sep 17 00:00:00 2001 From: daiana Date: Tue, 6 Apr 2021 17:28:20 +0300 Subject: [PATCH 03/12] Repair spec tests --- spec/unit/facter/mysql_server_id_spec.rb | 7 +- spec/unit/facter/mysql_version_spec.rb | 4 +- spec/unit/facter/mysqld_version_spec.rb | 4 +- .../provider/mysql_database/mysql_spec.rb | 36 ++-- .../mysql_login_path/mysql_login_path_spec.rb | 33 ++-- .../provider/mysql_plugin/mysql_spec.rb | 20 +- .../puppet/provider/mysql_user/mysql_spec.rb | 184 +++++++++--------- spec/unit/puppet/type/mysql_grant_spec.rb | 4 +- spec/unit/puppet/type/mysql_user_spec.rb | 6 +- 9 files changed, 149 insertions(+), 149 deletions(-) diff --git a/spec/unit/facter/mysql_server_id_spec.rb b/spec/unit/facter/mysql_server_id_spec.rb index f09de607b..057636f0b 100644 --- a/spec/unit/facter/mysql_server_id_spec.rb +++ b/spec/unit/facter/mysql_server_id_spec.rb @@ -10,7 +10,7 @@ describe 'mysql_server_id' do context "igalic's laptop" do before :each do - Facter.fact(:macaddress).stubs(:value).returns('3c:97:0e:69:fb:e1') + allow(Facter.fact(:macaddress)).to receive(:value).and_return('3c:97:0e:69:fb:e1') end it do Facter.fact(:mysql_server_id).value.to_s.should == '241857808' @@ -19,7 +19,8 @@ context 'node with lo only' do before :each do - Facter.fact(:macaddress).stubs(:value).returns('00:00:00:00:00:00') + allow(Facter.fact(:macaddress)).to receive(:value).and_return('00:00:00:00:00:00') + end it do Facter.fact(:mysql_server_id).value.to_s.should == '1' @@ -28,7 +29,7 @@ context 'test nil case' do before :each do - Facter.fact(:macaddress).stubs(:value).returns(nil) + allow(Facter.fact(:macaddress)).to receive(:value).and_return(nil) end it do Facter.fact(:mysql_server_id).value.to_s.should == '' diff --git a/spec/unit/facter/mysql_version_spec.rb b/spec/unit/facter/mysql_version_spec.rb index abcc6fc5a..825fb4865 100644 --- a/spec/unit/facter/mysql_version_spec.rb +++ b/spec/unit/facter/mysql_version_spec.rb @@ -10,8 +10,8 @@ describe 'mysql_version' do context 'with value' do before :each do - Facter::Core::Execution.stubs(:which).returns('fake_mysql_path') - Facter::Util::Resolution.stubs(:exec).with('mysql --version').returns('mysql Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (x86_64) using readline 5.1') + allow(Facter::Core::Execution).to receive(:which).and_return('fake_mysql_path') + allow(Facter::Util::Resolution).to receive(:exec).with('mysql --version').and_return('mysql Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (x86_64) using readline 5.1') end it { expect(Facter.fact(:mysql_version).value).to eq('5.0.95') diff --git a/spec/unit/facter/mysqld_version_spec.rb b/spec/unit/facter/mysqld_version_spec.rb index 2be7108e8..bed529e23 100644 --- a/spec/unit/facter/mysqld_version_spec.rb +++ b/spec/unit/facter/mysqld_version_spec.rb @@ -10,8 +10,8 @@ describe 'mysqld_version' do context 'with value' do before :each do - Facter::Core::Execution.stubs(:which).with('mysqld').returns('/usr/sbin/mysqld') - Facter::Util::Resolution.stubs(:exec).with('mysqld --no-defaults -V 2>/dev/null').returns('mysqld Ver 5.5.49-37.9 for Linux on x86_64 (Percona Server (GPL), Release 37.9, Revision efa0073)') + allow(Facter::Core::Execution).to receive(:which).with('mysqld').and_return('/usr/sbin/mysqld') + allow(Facter::Util::Resolution).to receive(:exec).with('mysqld --no-defaults -V 2>/dev/null').and_return('mysqld Ver 5.5.49-37.9 for Linux on x86_64 (Percona Server (GPL), Release 37.9, Revision efa0073)') end it { expect(Facter.fact(:mysqld_version).value).to eq('mysqld Ver 5.5.49-37.9 for Linux on x86_64 (Percona Server (GPL), Release 37.9, Revision efa0073)') diff --git a/spec/unit/puppet/provider/mysql_database/mysql_spec.rb b/spec/unit/puppet/provider/mysql_database/mysql_spec.rb index 5147398be..93d942bd8 100644 --- a/spec/unit/puppet/provider/mysql_database/mysql_spec.rb +++ b/spec/unit/puppet/provider/mysql_database/mysql_spec.rb @@ -26,18 +26,19 @@ end before :each do - Facter.stubs(:value).with(:root_home).returns('/root') - Puppet::Util.stubs(:which).with('mysql').returns('/usr/bin/mysql') - File.stubs(:file?).with('/root/.my.cnf').returns(true) - provider.class.stubs(:mysql_caller).with('show databases', 'regular').returns('new_database') - provider.class.stubs(:mysql_caller).with(["show variables like '%_database'", 'new_database'], 'regular').returns("character_set_database latin1\ncollation_database latin1_swedish_ci\nskip_show_database OFF") # rubocop:disable Layout/LineLength + allow(Facter.fact(:value)).to receive(:root_home).and_return('/root') + allow(Puppet::Util).to receive(:which).with('mysql').and_return('/usr/bin/mysql') + allow(File).to receive(:file?).with('/root/.my.cnf').and_return(true) + allow(provider.class).to receive(:mysql_caller).with('show databases', 'regular').and_return('new_database') + allow(provider.class).to receive(:mysql_caller).with(["show variables like '%_database'", 'new_database'], 'regular').and_return("character_set_database latin1\ncollation_database latin1_swedish_ci\nskip_show_database OFF") # rubocop:disable Layout/LineLength + end describe 'self.instances' do it 'returns an array of databases' do - provider.class.stubs(:mysql_caller).with('show databases', 'regular').returns(raw_databases) + allow(provider.class).to receive(:mysql_caller).with('show databases', 'regular').and_return(raw_databases) raw_databases.each_line do |db| - provider.class.stubs(:mysql_caller).with(["show variables like '%_database'", db.chomp], 'regular').returns("character_set_database latin1\ncollation_database latin1_swedish_ci\nskip_show_database OFF") # rubocop:disable Layout/LineLength + allow(provider.class).to receive(:mysql_caller).with(["show variables like '%_database'", db.chomp], 'regular').and_return("character_set_database latin1\ncollation_database latin1_swedish_ci\nskip_show_database OFF") # rubocop:disable Layout/LineLength end databases = provider.class.instances.map { |x| x.name } expect(parsed_databases).to match_array(databases) @@ -53,16 +54,16 @@ describe 'create' do it 'makes a database' do - provider.class.expects(:mysql_caller).with("create database if not exists `#{resource[:name]}` character set `#{resource[:charset]}` collate `#{resource[:collate]}`", 'regular') - provider.expects(:exists?).returns(true) + expect(provider.class).to receive(:mysql_caller).with("create database if not exists `#{resource[:name]}` character set `#{resource[:charset]}` collate `#{resource[:collate]}`", 'regular') + expect(provider).to receive(:exists?).and_return(true) expect(provider.create).to be_truthy end end describe 'destroy' do it 'removes a database if present' do - provider.class.expects(:mysql_caller).with("drop database if exists `#{resource[:name]}`", 'regular') - provider.expects(:exists?).returns(false) + expect( provider.class).to receive(:mysql_caller).with("drop database if exists `#{resource[:name]}`", 'regular') + expect(provider).to receive(:exists?).and_return(false) expect(provider.destroy).to be_truthy end end @@ -74,12 +75,15 @@ end describe 'self.defaults_file' do + before :each do + allow(Facter).to receive(:value).with(:root_home).and_return('/root') + end it 'sets --defaults-extra-file' do - File.stubs(:file?).with('/root/.my.cnf').returns(true) + allow(File).to receive(:file?).with('/root/.my.cnf').and_return(true) expect(provider.defaults_file).to eq '--defaults-extra-file=/root/.my.cnf' end it 'fails if file missing' do - File.stubs(:file?).with('/root/.my.cnf').returns(false) + allow(File).to receive(:file?).with('/root/.my.cnf').and_return(false) expect(provider.defaults_file).to be_nil end end @@ -92,8 +96,7 @@ describe 'charset=' do it 'changes the charset' do - provider.class.expects(:mysql_caller).with("alter database `#{resource[:name]}` CHARACTER SET blah", 'regular').returns('0') - + expect(provider.class).to receive(:mysql_caller).with("alter database `#{resource[:name]}` CHARACTER SET blah", 'regular').and_return('0') provider.charset = 'blah' end end @@ -106,8 +109,7 @@ describe 'collate=' do it 'changes the collate' do - provider.class.expects(:mysql_caller).with("alter database `#{resource[:name]}` COLLATE blah", 'regular').returns('0') - + expect(provider.class).to receive(:mysql_caller).with("alter database `#{resource[:name]}` COLLATE blah", 'regular').and_return('0') provider.collate = 'blah' end end diff --git a/spec/unit/puppet/provider/mysql_login_path/mysql_login_path_spec.rb b/spec/unit/puppet/provider/mysql_login_path/mysql_login_path_spec.rb index 92e83aa9c..5cbf4133f 100644 --- a/spec/unit/puppet/provider/mysql_login_path/mysql_login_path_spec.rb +++ b/spec/unit/puppet/provider/mysql_login_path/mysql_login_path_spec.rb @@ -8,35 +8,32 @@ RSpec.describe Puppet::Provider::MysqlLoginPath::MysqlLoginPath do subject(:provider) { described_class.new } - let(:context) { mock('Puppet::ResourceApi::BaseContext') } - let(:wait_thr) { mock('wait_thr') } - let(:wait_thr_value) { mock('wait_thr_value') } + let(:context) { double('Puppet::ResourceApi::BaseContext') } + let(:wait_thr) { double('wait_thr') } + let(:wait_thr_value) { double('wait_thr_value') } let(:sensitive_secure) { Puppet::Provider::MysqlLoginPath::Sensitive.new('secure') } let(:sensitive_more_secure) { Puppet::Provider::MysqlLoginPath::Sensitive.new('more_secure') } before :each do - Puppet::Util::Execution.stubs(:execute).with(['/usr/bin/getent', 'passwd', 'root'], failonfail: true).returns('root:x:0:0:root:/root:/bin/bash') + # Puppet::Util::Execution.stubs(:execute).with(['/usr/bin/getent', 'passwd', 'root'], failonfail: true).returns('root:x:0:0:root:/root:/bin/bash') + allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/getent', 'passwd', 'root'], failonfail: true).and_return('root:x:0:0:root:/root:/bin/bash') + allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/mysql_config_editor', 'print', '--all'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }).and_return("[local_tcp]\nuser = root\npassword = *****\nhost = 127.0.0.1\nport = 3306") + allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/mysql_config_editor', 'remove', '-G', 'local_socket'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }) + allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/my_print_defaults', '-s', 'local_tcp'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }).and_return("--user=root\n--password=secure\n--host=127.0.0.1\n--port=3306") + allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/my_print_defaults', '-s', 'local_socket'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }) + .and_return("--user=root\n--password=more_secure\n--host=localhost\n--socket=/var/run/mysql.sock") - Puppet::Util::Execution.stubs(:execute).with(['/usr/bin/mysql_config_editor', 'print', '--all'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }) - .returns("[local_tcp]\nuser = root\npassword = *****\nhost = 127.0.0.1\nport = 3306") - Puppet::Util::Execution.stubs(:execute).with(['/usr/bin/mysql_config_editor', 'remove', '-G', 'local_socket'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }) - - Puppet::Util::Execution.stubs(:execute).with(['/usr/bin/my_print_defaults', '-s', 'local_tcp'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }) - .returns("--user=root\n--password=secure\n--host=127.0.0.1\n--port=3306") - Puppet::Util::Execution.stubs(:execute).with(['/usr/bin/my_print_defaults', '-s', 'local_socket'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }) - .returns("--user=root\n--password=more_secure\n--host=localhost\n--socket=/var/run/mysql.sock") - - Puppet::Util::SUIDManager.stubs(:asuser).with('root').returns(`(exit 0)`) - PTY.stubs(:spawn) + allow(Puppet::Util::SUIDManager).to receive(:asuser).with('root').and_return(`(exit 0)`) + allow(PTY).to receive(:spawn) .with({ 'HOME' => '/root' }, '/usr/bin/mysql_config_editor set --skip-warn -G local_socket -h localhost -u root ' \ '-S /var/run/mysql/mysql.sock -p') - .returns(`(exit 0)`) + .and_return(`(exit 0)`) - PTY.stubs(:spawn) + allow(PTY).to receive(:spawn) .with({ 'HOME' => '/root' }, '/usr/bin/mysql_config_editor set --skip-warn -G local_socket -h 127.0.0.1 -u root -P 3306 -p') - .returns(`(exit 0)`) + .and_return(`(exit 0)`) end describe '#get' do diff --git a/spec/unit/puppet/provider/mysql_plugin/mysql_spec.rb b/spec/unit/puppet/provider/mysql_plugin/mysql_spec.rb index 2a4bad641..a7ad0eb24 100644 --- a/spec/unit/puppet/provider/mysql_plugin/mysql_spec.rb +++ b/spec/unit/puppet/provider/mysql_plugin/mysql_spec.rb @@ -16,10 +16,10 @@ end before :each do - Facter.stubs(:value).with(:root_home).returns('/root') - Puppet::Util.stubs(:which).with('mysql').returns('/usr/bin/mysql') - File.stubs(:file?).with('/root/.my.cnf').returns(true) - provider.class.stubs(:mysql_caller).with('show plugins', 'regular').returns('auth_socket ACTIVE AUTHENTICATION auth_socket.so GPL') + allow(Facter).to receive(:value).with(:root_home).and_return('/root') + allow(Puppet::Util).to receive(:which).with('mysql').and_return('/usr/bin/mysql') + allow(File).to receive(:file?).with('/root/.my.cnf').and_return(true) + allow(provider.class).to receive(:mysql_caller).with('show plugins', 'regular').and_return('auth_socket ACTIVE AUTHENTICATION auth_socket.so GPL') end describe 'self.prefetch' do @@ -31,16 +31,16 @@ describe 'create' do it 'loads a plugin' do - provider.class.expects(:mysql_caller).with("install plugin #{resource[:name]} soname '#{resource[:soname]}'", 'regular') - provider.expects(:exists?).returns(true) + expect(provider.class).to receive(:mysql_caller).with("install plugin #{resource[:name]} soname '#{resource[:soname]}'", 'regular') + expect(provider).to receive(:exists?).and_return(true) expect(provider.create).to be_truthy end end describe 'destroy' do it 'unloads a plugin if present' do - provider.class.expects(:mysql_caller).with("uninstall plugin #{resource[:name]}", 'regular') - provider.expects(:exists?).returns(false) + expect(provider.class).to receive(:mysql_caller).with("uninstall plugin #{resource[:name]}", 'regular') + expect(provider).to receive(:exists?).and_return(false) expect(provider.destroy).to be_truthy end end @@ -53,11 +53,11 @@ describe 'self.defaults_file' do it 'sets --defaults-extra-file' do - File.stubs(:file?).with('/root/.my.cnf').returns(true) + allow(File).to receive(:file?).with('/root/.my.cnf').and_return(true) expect(provider.defaults_file).to eq '--defaults-extra-file=/root/.my.cnf' end it 'fails if file missing' do - File.stubs(:file?).with('/root/.my.cnf').returns(false) + allow(File).to receive(:file?).with('/root/.my.cnf').and_return(false) expect(provider.defaults_file).to be_nil end end diff --git a/spec/unit/puppet/provider/mysql_user/mysql_spec.rb b/spec/unit/puppet/provider/mysql_user/mysql_spec.rb index ba72cc182..fa0a35f28 100644 --- a/spec/unit/puppet/provider/mysql_user/mysql_spec.rb +++ b/spec/unit/puppet/provider/mysql_user/mysql_spec.rb @@ -96,69 +96,69 @@ before :each do # Set up the stubs for an instances call. - Facter.stubs(:value).with(:root_home).returns('/root') - Facter.stubs(:value).with(:mysql_version).returns('5.6.24') + allow(Facter).to receive(:value).with(:root_home).and_return('/root') + allow(Facter).to receive(:value).with(:mysql_version).and_return('5.6.24') provider.class.instance_variable_set(:@mysqld_version_string, '5.6.24') - Puppet::Util.stubs(:which).with('mysql').returns('/usr/bin/mysql') - Puppet::Util.stubs(:which).with('mysqld').returns('/usr/sbin/mysqld') - File.stubs(:file?).with('/root/.my.cnf').returns(true) - provider.class.stubs(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').returns('joe@localhost') - provider.class.stubs(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = 'joe@localhost'", 'regular').returns('10 10 10 10 *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4') # rubocop:disable Layout/LineLength + allow(Puppet::Util).to receive(:which).with('mysql').and_return('/usr/bin/mysql') + allow(Puppet::Util).to receive(:which).with('mysqld').and_return('/usr/sbin/mysqld') + allow(File).to receive(:file?).with('/root/.my.cnf').and_return(true) + allow(provider.class).to receive(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').and_return('joe@localhost') + allow(provider.class).to receive(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = 'joe@localhost'", 'regular').and_return('10 10 10 10 *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4') # rubocop:disable Layout/LineLength end describe 'self.instances' do it 'returns an array of users MySQL 5.5' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.5'][:string]) - provider.class.stubs(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').returns(raw_users) - parsed_users.each { |user| provider.class.stubs(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').returns('10 10 10 10 ') } # rubocop:disable Layout/LineLength + allow(provider.class).to receive(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').and_return(raw_users) + parsed_users.each { |user| allow(provider.class).to receive(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').and_return('10 10 10 10 ') } # rubocop:disable Layout/LineLength usernames = provider.class.instances.map { |x| x.name } expect(parsed_users).to match_array(usernames) end it 'returns an array of users MySQL 5.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.6'][:string]) - provider.class.stubs(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').returns(raw_users) - parsed_users.each { |user| provider.class.stubs(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').returns('10 10 10 10 ') } # rubocop:disable Layout/LineLength + allow(provider.class).to receive(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').and_return(raw_users) + parsed_users.each { |user| allow(provider.class).to receive(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').and_return('10 10 10 10 ') } # rubocop:disable Layout/LineLength usernames = provider.class.instances.map { |x| x.name } expect(parsed_users).to match_array(usernames) end it 'returns an array of users MySQL >= 5.7.0 < 5.7.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.1'][:string]) - provider.class.stubs(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').returns(raw_users) - parsed_users.each { |user| provider.class.stubs(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').returns('10 10 10 10 ') } # rubocop:disable Layout/LineLength + allow(provider.class).to receive(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').and_return(raw_users) + parsed_users.each { |user| allow(provider.class).to receive(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').and_return('10 10 10 10 ') } # rubocop:disable Layout/LineLength usernames = provider.class.instances.map { |x| x.name } expect(parsed_users).to match_array(usernames) end it 'returns an array of users MySQL >= 5.7.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.6'][:string]) - provider.class.stubs(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').returns(raw_users) - parsed_users.each { |user| provider.class.stubs(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, AUTHENTICATION_STRING, PLUGIN FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').returns('10 10 10 10 ') } # rubocop:disable Layout/LineLength + allow(provider.class).to receive(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').and_return(raw_users) + parsed_users.each { |user| allow(provider.class).to receive(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, AUTHENTICATION_STRING, PLUGIN FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').and_return('10 10 10 10 ') } # rubocop:disable Layout/LineLength usernames = provider.class.instances.map { |x| x.name } expect(parsed_users).to match_array(usernames) end it 'returns an array of users mariadb 10.0' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mariadb-10.0'][:string]) - provider.class.stubs(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').returns(raw_users) - parsed_users.each { |user| provider.class.stubs(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').returns('10 10 10 10 ') } # rubocop:disable Layout/LineLength + allow(provider.class).to receive(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').and_return(raw_users) + parsed_users.each { |user| allow(provider.class).to receive(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').and_return('10 10 10 10 ') } # rubocop:disable Layout/LineLength usernames = provider.class.instances.map { |x| x.name } expect(parsed_users).to match_array(usernames) end it 'returns an array of users mariadb >= 10.1.21' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mariadb-10.1.44'][:string]) - provider.class.stubs(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').returns(raw_users) - parsed_users.each { |user| provider.class.stubs(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD, PLUGIN, AUTHENTICATION_STRING FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').returns('10 10 10 10 ') } # rubocop:disable Layout/LineLength + allow(provider.class).to receive(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').and_return(raw_users) + parsed_users.each { |user| allow(provider.class).to receive(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD, PLUGIN, AUTHENTICATION_STRING FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').and_return('10 10 10 10 ') } # rubocop:disable Layout/LineLength usernames = provider.class.instances.map { |x| x.name } expect(parsed_users).to match_array(usernames) end it 'returns an array of users percona 5.5' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['percona-5.5'][:string]) - provider.class.stubs(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').returns(raw_users) - parsed_users.each { |user| provider.class.stubs(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').returns('10 10 10 10 ') } # rubocop:disable Layout/LineLength + allow(provider.class).to receive(:mysql_caller).with("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').and_return(raw_users) + parsed_users.each { |user| allow(provider.class).to receive(:mysql_caller).with("SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'", 'regular').and_return('10 10 10 10 ') } # rubocop:disable Layout/LineLength usernames = provider.class.instances.map { |x| x.name } expect(parsed_users).to match_array(usernames) @@ -190,33 +190,33 @@ describe 'create' do it 'makes a user' do - provider.class.expects(:mysql_caller).with("CREATE USER 'joe'@'localhost' IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'", 'system') - provider.class.expects(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' WITH MAX_USER_CONNECTIONS 10 MAX_CONNECTIONS_PER_HOUR 10 MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HOUR 10", 'system') # rubocop:disable Layout/LineLength - provider.class.expects(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE NONE", 'system') - provider.expects(:exists?).returns(true) + expect(provider.class).to receive(:mysql_caller).with("CREATE USER 'joe'@'localhost' IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'", 'system') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' WITH MAX_USER_CONNECTIONS 10 MAX_CONNECTIONS_PER_HOUR 10 MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HOUR 10", 'system') # rubocop:disable Layout/LineLength + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE NONE", 'system') + expect(provider).to receive(:exists?).and_return(true) expect(provider.create).to be_truthy end it 'creates a user using IF NOT EXISTS' do provider.class.instance_variable_set(:@mysqld_version_string, '5.7.6') - provider.class.expects(:mysql_caller).with("CREATE USER IF NOT EXISTS 'joe'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'", 'system') - provider.class.expects(:mysql_caller).with("ALTER USER IF EXISTS 'joe'@'localhost' WITH MAX_USER_CONNECTIONS 10 MAX_CONNECTIONS_PER_HOUR 10 MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HOUR 10", 'system') # rubocop:disable Layout/LineLength - provider.class.expects(:mysql_caller).with("ALTER USER 'joe'@'localhost' REQUIRE NONE", 'system') - provider.expects(:exists?).returns(true) + expect(provider.class).to receive(:mysql_caller).with("CREATE USER IF NOT EXISTS 'joe'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'", 'system') + expect(provider.class).to receive(:mysql_caller).with("ALTER USER IF EXISTS 'joe'@'localhost' WITH MAX_USER_CONNECTIONS 10 MAX_CONNECTIONS_PER_HOUR 10 MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HOUR 10", 'system') # rubocop:disable Layout/LineLength + expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' REQUIRE NONE", 'system') + expect(provider).to receive(:exists?).and_return(true) expect(provider.create).to be_truthy end end describe 'destroy' do it 'removes a user if present' do - provider.class.expects(:mysql_caller).with("DROP USER 'joe'@'localhost'", 'system') - provider.expects(:exists?).returns(false) + expect(provider.class).to receive(:mysql_caller).with("DROP USER 'joe'@'localhost'", 'system') + expect(provider).to receive(:exists?).and_return(false) expect(provider.destroy).to be_truthy end it 'removes a user using IF EXISTS' do provider.class.instance_variable_set(:@mysqld_version_string, '5.7.1') - provider.class.expects(:mysql_caller).with("DROP USER IF EXISTS 'joe'@'localhost'", 'system') + expect(provider.class).to receive(:mysql_caller).with("DROP USER IF EXISTS 'joe'@'localhost'", 'system') expect(provider.destroy).to be_truthy end end @@ -230,7 +230,7 @@ describe 'self.mysqld_version' do it 'uses the mysqld_version fact if unset' do provider.class.instance_variable_set(:@mysqld_version_string, nil) - Facter.stubs(:value).with(:mysqld_version).returns('5.6.24') + allow(Facter).to receive(:value).with(:mysqld_version).and_return('5.6.24') expect(provider.mysqld_version).to eq '5.6.24' end it 'returns 5.7.6 for "mysqld Ver 5.7.6 for Linux on x86_64 (MySQL Community Server (GPL))"' do @@ -253,11 +253,11 @@ describe 'self.defaults_file' do it 'sets --defaults-extra-file' do - File.stubs(:file?).with('/root/.my.cnf').returns(true) + allow(File).to receive(:file?).with('/root/.my.cnf').and_return(true) expect(provider.defaults_file).to eq '--defaults-extra-file=/root/.my.cnf' end it 'fails if file missing' do - File.expects(:file?).with('/root/.my.cnf').returns(false) + expect(File).to receive(:file?).with('/root/.my.cnf').and_return(false) expect(provider.defaults_file).to be_nil end end @@ -271,63 +271,63 @@ describe 'password_hash=' do it 'changes the hash mysql 5.5' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.5'][:string]) - provider.class.expects(:mysql_caller).with("SET PASSWORD FOR 'joe'@'localhost' = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("SET PASSWORD FOR 'joe'@'localhost' = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", 'system').and_return('0') - provider.expects(:password_hash).returns('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5') + expect(provider).to receive(:password_hash).and_return('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5') provider.password_hash = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5' end it 'changes the hash mysql 5.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.6'][:string]) - provider.class.expects(:mysql_caller).with("SET PASSWORD FOR 'joe'@'localhost' = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("SET PASSWORD FOR 'joe'@'localhost' = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", 'system').and_return('0') - provider.expects(:password_hash).returns('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5') + expect(provider).to receive(:password_hash).and_return('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5') provider.password_hash = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5' end it 'changes the hash mysql < 5.7.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.1'][:string]) - provider.class.expects(:mysql_caller).with("SET PASSWORD FOR 'joe'@'localhost' = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("SET PASSWORD FOR 'joe'@'localhost' = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", 'system').and_return('0') - provider.expects(:password_hash).returns('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5') + expect(provider).to receive(:password_hash).and_return('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5') provider.password_hash = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5' end it 'changes the hash MySQL >= 5.7.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.6'][:string]) - provider.class.expects(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH mysql_native_password AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH mysql_native_password AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", 'system').and_return('0') - provider.expects(:password_hash).returns('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5') + expect(provider).to receive(:password_hash).and_return('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5') provider.password_hash = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5' end it 'changes the hash mariadb-10.0' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mariadb-10.0'][:string]) - provider.class.expects(:mysql_caller).with("SET PASSWORD FOR 'joe'@'localhost' = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("SET PASSWORD FOR 'joe'@'localhost' = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", 'system').and_return('0') - provider.expects(:password_hash).returns('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5') + expect(provider).to receive(:password_hash).and_return('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5') provider.password_hash = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5' end it 'changes the hash to an ed25519 hash mariadb >= 10.1.21 and < 10.2.0' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mariadb-10.1.44'][:string]) - resource.stubs(:value).with(:plugin).returns('ed25519') - provider.class.expects(:mysql_caller).with("UPDATE mysql.user SET password = '', plugin = 'ed25519', authentication_string = 'z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU' where CONCAT(user, '@', host) = 'joe@localhost'; FLUSH PRIVILEGES", 'system').returns('0') # rubocop:disable Layout/LineLength - provider.expects(:password_hash).returns('z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU') + allow(resource).to receive(:value).with(:plugin).and_return('ed25519') + expect(provider.class).to receive(:mysql_caller).with("UPDATE mysql.user SET password = '', plugin = 'ed25519', authentication_string = 'z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU' where CONCAT(user, '@', host) = 'joe@localhost'; FLUSH PRIVILEGES", 'system').and_return('0') # rubocop:disable Layout/LineLength + expect(provider).to receive(:password_hash).and_return('z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU') provider.password_hash = 'z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU' end it 'changes the hash to an ed25519 hash mariadb >= 10.2.0' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mariadb-10.3.22'][:string]) - resource.stubs(:value).with(:plugin).returns('ed25519') - provider.class.expects(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH ed25519 AS 'z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU'", 'system').returns('0') - provider.expects(:password_hash).returns('z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU') + allow(resource).to receive(:value).with(:plugin).and_return('ed25519') + expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH ed25519 AS 'z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU'", 'system').and_return('0') + expect(provider).to receive(:password_hash).and_return('z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU') provider.password_hash = 'z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU' end it 'changes the hash to an invalid ed25519 hash mariadb >= 10.1.21' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mariadb-10.1.44'][:string]) - resource.stubs(:value).with(:plugin).returns('ed25519') + allow(resource).to receive(:value).with(:plugin).and_return('ed25519') expect { provider.password_hash = 'invalid' }.to raise_error(ArgumentError, 'ed25519 hash should be 43 bytes long.') end it 'changes the hash percona-5.5' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['percona-5.5'][:string]) - provider.class.expects(:mysql_caller).with("SET PASSWORD FOR 'joe'@'localhost' = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("SET PASSWORD FOR 'joe'@'localhost' = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", 'system').and_return('0') - provider.expects(:password_hash).returns('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5') + expect(provider).to receive(:password_hash).and_return('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5') provider.password_hash = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5' end end @@ -337,9 +337,9 @@ context 'MySQL < 5.7.6' do it 'changes the authentication plugin' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.1'][:string]) - provider.class.expects(:mysql_caller).with("UPDATE mysql.user SET plugin = 'auth_socket', password = '' WHERE CONCAT(user, '@', host) = 'joe@localhost'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("UPDATE mysql.user SET plugin = 'auth_socket', password = '' WHERE CONCAT(user, '@', host) = 'joe@localhost'", 'system').and_return('0') - provider.expects(:plugin).returns('auth_socket') + expect(provider).to receive(:plugin).and_return('auth_socket') provider.plugin = 'auth_socket' end end @@ -347,9 +347,9 @@ context 'MySQL >= 5.7.6' do it 'changes the authentication plugin' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.6'][:string]) - provider.class.expects(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH 'auth_socket'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH 'auth_socket'", 'system').and_return('0') - provider.expects(:plugin).returns('auth_socket') + expect(provider).to receive(:plugin).and_return('auth_socket') provider.plugin = 'auth_socket' end end @@ -359,9 +359,9 @@ context 'MySQL < 5.7.6' do it 'changes the authentication plugin' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.1'][:string]) - provider.class.expects(:mysql_caller).with("UPDATE mysql.user SET plugin = 'mysql_native_password', password = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4' WHERE CONCAT(user, '@', host) = 'joe@localhost'", 'system').returns('0') # rubocop:disable Layout/LineLength + expect(provider.class).to receive(:mysql_caller).with("UPDATE mysql.user SET plugin = 'mysql_native_password', password = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4' WHERE CONCAT(user, '@', host) = 'joe@localhost'", 'system').and_return('0') # rubocop:disable Layout/LineLength - provider.expects(:plugin).returns('mysql_native_password') + expect(provider).to receive(:plugin).and_return('mysql_native_password') provider.plugin = 'mysql_native_password' end end @@ -369,9 +369,9 @@ context 'MySQL >= 5.7.6' do it 'changes the authentication plugin' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.6'][:string]) - provider.class.expects(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'", 'system').and_return('0') - provider.expects(:plugin).returns('mysql_native_password') + expect(provider).to receive(:plugin).and_return('mysql_native_password') provider.plugin = 'mysql_native_password' end end @@ -381,10 +381,10 @@ context 'mariadb >= 10.1.21 and < 10.2.0' do it 'changes the authentication plugin' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mariadb-10.1.44'][:string]) - resource.stubs('[]').with(:name).returns('joe@localhost') - resource.stubs('[]').with(:password_hash).returns('z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU') - provider.class.expects(:mysql_caller).with("UPDATE mysql.user SET password = '', plugin = 'ed25519', authentication_string = 'z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU' where CONCAT(user, '@', host) = 'joe@localhost'; FLUSH PRIVILEGES", 'system').returns('0') # rubocop:disable Layout/LineLength - provider.expects(:plugin).returns('ed25519') + allow(resource).to receive('[]').with(:name).and_return('joe@localhost') + allow(resource).to receive('[]').with(:password_hash).and_return('z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU') + expect(provider.class).to receive(:mysql_caller).with("UPDATE mysql.user SET password = '', plugin = 'ed25519', authentication_string = 'z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU' where CONCAT(user, '@', host) = 'joe@localhost'; FLUSH PRIVILEGES", 'system').and_return('0') # rubocop:disable Layout/LineLength + expect(provider).to receive(:plugin).and_return('ed25519') provider.plugin = 'ed25519' end end @@ -392,10 +392,10 @@ context 'mariadb >= 10.2.0' do it 'changes the authentication plugin' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mariadb-10.3.22'][:string]) - resource.stubs('[]').with(:name).returns('joe@localhost') - resource.stubs('[]').with(:password_hash).returns('z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU') - provider.class.expects(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH 'ed25519' AS 'z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU'", 'system').returns('0') - provider.expects(:plugin).returns('ed25519') + allow(resource).to receive('[]').with(:name).and_return('joe@localhost') + expect(resource).to receive('[]').with(:password_hash).and_return('z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU') + expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH 'ed25519' AS 'z0pjExBYbzbupUByZRrQvC6kRCcE8n/tC7kUdUD11fU'", 'system').and_return('0') + expect(provider).to receive(:plugin).and_return('ed25519') provider.plugin = 'ed25519' end end @@ -406,37 +406,37 @@ describe 'tls_options=' do it 'adds SSL option grant in mysql 5.5' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.5'][:string]) - provider.class.expects(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE NONE", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE NONE", 'system').and_return('0') - provider.expects(:tls_options).returns(['NONE']) + expect(provider).to receive(:tls_options).and_return(['NONE']) provider.tls_options = ['NONE'] end it 'adds SSL option grant in mysql 5.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.6'][:string]) - provider.class.expects(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE NONE", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE NONE", 'system').and_return('0') - provider.expects(:tls_options).returns(['NONE']) + expect(provider).to receive(:tls_options).and_return(['NONE']) provider.tls_options = ['NONE'] end it 'adds SSL option grant in mysql < 5.7.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.1'][:string]) - provider.class.expects(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE NONE", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE NONE", 'system').and_return('0') - provider.expects(:tls_options).returns(['NONE']) + expect(provider).to receive(:tls_options).and_return(['NONE']) provider.tls_options = ['NONE'] end it 'adds SSL option grant in mysql >= 5.7.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.6'][:string]) - provider.class.expects(:mysql_caller).with("ALTER USER 'joe'@'localhost' REQUIRE NONE", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' REQUIRE NONE", 'system').and_return('0') - provider.expects(:tls_options).returns(['NONE']) + expect(provider).to receive(:tls_options).and_return(['NONE']) provider.tls_options = ['NONE'] end it 'adds SSL option grant in mariadb-10.0' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mariadb-10.0'][:string]) - provider.class.expects(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE NONE", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE NONE", 'system').and_return('0') - provider.expects(:tls_options).returns(['NONE']) + expect(provider).to receive(:tls_options).and_return(['NONE']) provider.tls_options = ['NONE'] end end @@ -444,37 +444,37 @@ describe 'tls_options=required' do it 'adds mTLS option grant in mysql 5.5' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.5'][:string]) - provider.class.expects(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').and_return('0') - provider.expects(:tls_options).returns(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) + expect(provider).to receive(:tls_options).and_return(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) provider.tls_options = ['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\''] end it 'adds mTLS option grant in mysql 5.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.6'][:string]) - provider.class.expects(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').and_return('0') - provider.expects(:tls_options).returns(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) + expect(provider).to receive(:tls_options).and_return(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) provider.tls_options = ['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\''] end it 'adds mTLS option grant in mysql < 5.7.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.1'][:string]) - provider.class.expects(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').and_return('0') - provider.expects(:tls_options).returns(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) + expect(provider).to receive(:tls_options).and_return(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) provider.tls_options = ['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\''] end it 'adds mTLS option grant in mysql >= 5.7.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.6'][:string]) - provider.class.expects(:mysql_caller).with("ALTER USER 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').and_return('0') - provider.expects(:tls_options).returns(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) + expect(provider).to receive(:tls_options).and_return(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) provider.tls_options = ['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\''] end it 'adds mTLS option grant in mariadb-10.0' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mariadb-10.0'][:string]) - provider.class.expects(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').returns('0') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').and_return('0') - provider.expects(:tls_options).returns(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) + expect(provider).to receive(:tls_options).and_return(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) provider.tls_options = ['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\''] end end @@ -488,8 +488,8 @@ describe "#{property}=" do it "changes #{property}" do - provider.class.expects(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' WITH #{property.upcase} 42", 'system').returns('0') - provider.expects(property.to_sym).returns('42') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' WITH #{property.upcase} 42", 'system').and_return('0') + expect(provider).to receive(property.to_sym).and_return('42') provider.send("#{property}=".to_sym, '42') end end diff --git a/spec/unit/puppet/type/mysql_grant_spec.rb b/spec/unit/puppet/type/mysql_grant_spec.rb index 602c22a10..c90d66081 100644 --- a/spec/unit/puppet/type/mysql_grant_spec.rb +++ b/spec/unit/puppet/type/mysql_grant_spec.rb @@ -17,7 +17,7 @@ context 'PROXY privilege with mysql greater than or equal to 5.5.0' do before :each do - Facter.stubs(:value).with(:mysql_version).returns('5.5.0') + allow(Facter).to receive(:value).with(:mysql_version).and_return('5.5.0') end it 'does not raise error' do @@ -29,7 +29,7 @@ context 'PROXY privilege with mysql greater than or equal to 5.4.0' do before :each do - Facter.stubs(:value).with(:mysql_version).returns('5.4.0') + allow(Facter).to receive(:value).with(:mysql_version).and_return('5.4.0') end it 'raises error' do diff --git a/spec/unit/puppet/type/mysql_user_spec.rb b/spec/unit/puppet/type/mysql_user_spec.rb index 09e1ada5a..a19359653 100644 --- a/spec/unit/puppet/type/mysql_user_spec.rb +++ b/spec/unit/puppet/type/mysql_user_spec.rb @@ -6,7 +6,7 @@ describe Puppet::Type.type(:mysql_user) do context 'On MySQL 5.x' do before :each do - Facter.stubs(:value).with(:mysql_version).returns('5.6.24') + allow(Facter).to receive(:value).with(:mysql_version).and_return('5.6.24') end it 'fails with a long user name' do @@ -20,7 +20,7 @@ let(:user) { Puppet::Type.type(:mysql_user).new(name: '12345678901234567@localhost', password_hash: 'pass') } before :each do - Facter.stubs(:value).with(:mysql_version).returns('10.0.19') + allow(Facter).to receive(:value).with(:mysql_version).and_return('10.0.19') end it 'succeeds with a long user name on MariaDB' do @@ -94,7 +94,7 @@ context 'using a quoted username that is too long ' do before :each do - Facter.stubs(:value).with(:mysql_version).returns('5.6.24') + allow(Facter).to receive(:value).with(:mysql_version).and_return('5.6.24') end it 'fails with a size error' do From 63d165039f3483c484746519b7d2d0e2e4758778 Mon Sep 17 00:00:00 2001 From: daiana Date: Tue, 6 Apr 2021 17:42:04 +0300 Subject: [PATCH 04/12] Fix rubocop --- spec/unit/facter/mysql_server_id_spec.rb | 1 - spec/unit/facter/mysqld_version_spec.rb | 4 ++- .../provider/mysql_database/mysql_spec.rb | 11 ++++--- .../mysql_login_path/mysql_login_path_spec.rb | 30 ++++++++++--------- .../puppet/provider/mysql_user/mysql_spec.rb | 24 ++++++++++----- 5 files changed, 40 insertions(+), 30 deletions(-) diff --git a/spec/unit/facter/mysql_server_id_spec.rb b/spec/unit/facter/mysql_server_id_spec.rb index 057636f0b..ee8b75ce3 100644 --- a/spec/unit/facter/mysql_server_id_spec.rb +++ b/spec/unit/facter/mysql_server_id_spec.rb @@ -20,7 +20,6 @@ context 'node with lo only' do before :each do allow(Facter.fact(:macaddress)).to receive(:value).and_return('00:00:00:00:00:00') - end it do Facter.fact(:mysql_server_id).value.to_s.should == '1' diff --git a/spec/unit/facter/mysqld_version_spec.rb b/spec/unit/facter/mysqld_version_spec.rb index bed529e23..e5ca5289f 100644 --- a/spec/unit/facter/mysqld_version_spec.rb +++ b/spec/unit/facter/mysqld_version_spec.rb @@ -11,7 +11,8 @@ context 'with value' do before :each do allow(Facter::Core::Execution).to receive(:which).with('mysqld').and_return('/usr/sbin/mysqld') - allow(Facter::Util::Resolution).to receive(:exec).with('mysqld --no-defaults -V 2>/dev/null').and_return('mysqld Ver 5.5.49-37.9 for Linux on x86_64 (Percona Server (GPL), Release 37.9, Revision efa0073)') + allow(Facter::Util::Resolution).to receive(:exec).with('mysqld --no-defaults -V 2>/dev/null') + .and_return('mysqld Ver 5.5.49-37.9 for Linux on x86_64 (Percona Server (GPL), Release 37.9, Revision efa0073)') end it { expect(Facter.fact(:mysqld_version).value).to eq('mysqld Ver 5.5.49-37.9 for Linux on x86_64 (Percona Server (GPL), Release 37.9, Revision efa0073)') @@ -19,3 +20,4 @@ end end end + \ No newline at end of file diff --git a/spec/unit/puppet/provider/mysql_database/mysql_spec.rb b/spec/unit/puppet/provider/mysql_database/mysql_spec.rb index 93d942bd8..cd974c418 100644 --- a/spec/unit/puppet/provider/mysql_database/mysql_spec.rb +++ b/spec/unit/puppet/provider/mysql_database/mysql_spec.rb @@ -26,19 +26,18 @@ end before :each do - allow(Facter.fact(:value)).to receive(:root_home).and_return('/root') + allow(Facter.fact(:value)).to receive(:root_home).and_return('/root') allow(Puppet::Util).to receive(:which).with('mysql').and_return('/usr/bin/mysql') allow(File).to receive(:file?).with('/root/.my.cnf').and_return(true) allow(provider.class).to receive(:mysql_caller).with('show databases', 'regular').and_return('new_database') allow(provider.class).to receive(:mysql_caller).with(["show variables like '%_database'", 'new_database'], 'regular').and_return("character_set_database latin1\ncollation_database latin1_swedish_ci\nskip_show_database OFF") # rubocop:disable Layout/LineLength - end describe 'self.instances' do it 'returns an array of databases' do - allow(provider.class).to receive(:mysql_caller).with('show databases', 'regular').and_return(raw_databases) + allow(provider.class).to receive(:mysql_caller).with('show databases', 'regular').and_return(raw_databases) raw_databases.each_line do |db| - allow(provider.class).to receive(:mysql_caller).with(["show variables like '%_database'", db.chomp], 'regular').and_return("character_set_database latin1\ncollation_database latin1_swedish_ci\nskip_show_database OFF") # rubocop:disable Layout/LineLength + allow(provider.class).to receive(:mysql_caller).with(["show variables like '%_database'", db.chomp], 'regular').and_return("character_set_database latin1\ncollation_database latin1_swedish_ci\nskip_show_database OFF") # rubocop:disable Layout/LineLength end databases = provider.class.instances.map { |x| x.name } expect(parsed_databases).to match_array(databases) @@ -62,7 +61,7 @@ describe 'destroy' do it 'removes a database if present' do - expect( provider.class).to receive(:mysql_caller).with("drop database if exists `#{resource[:name]}`", 'regular') + expect(provider.class).to receive(:mysql_caller).with("drop database if exists `#{resource[:name]}`", 'regular') expect(provider).to receive(:exists?).and_return(false) expect(provider.destroy).to be_truthy end @@ -75,7 +74,7 @@ end describe 'self.defaults_file' do - before :each do + before :each do allow(Facter).to receive(:value).with(:root_home).and_return('/root') end it 'sets --defaults-extra-file' do diff --git a/spec/unit/puppet/provider/mysql_login_path/mysql_login_path_spec.rb b/spec/unit/puppet/provider/mysql_login_path/mysql_login_path_spec.rb index 5cbf4133f..97927d39d 100644 --- a/spec/unit/puppet/provider/mysql_login_path/mysql_login_path_spec.rb +++ b/spec/unit/puppet/provider/mysql_login_path/mysql_login_path_spec.rb @@ -8,32 +8,34 @@ RSpec.describe Puppet::Provider::MysqlLoginPath::MysqlLoginPath do subject(:provider) { described_class.new } - let(:context) { double('Puppet::ResourceApi::BaseContext') } - let(:wait_thr) { double('wait_thr') } - let(:wait_thr_value) { double('wait_thr_value') } + let(:context) { instance_double('Puppet::ResourceApi::BaseContext') } + let(:wait_thr) { instance_double('wait_thr') } + let(:wait_thr_value) { instance_double('wait_thr_value') } let(:sensitive_secure) { Puppet::Provider::MysqlLoginPath::Sensitive.new('secure') } let(:sensitive_more_secure) { Puppet::Provider::MysqlLoginPath::Sensitive.new('more_secure') } before :each do # Puppet::Util::Execution.stubs(:execute).with(['/usr/bin/getent', 'passwd', 'root'], failonfail: true).returns('root:x:0:0:root:/root:/bin/bash') - allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/getent', 'passwd', 'root'], failonfail: true).and_return('root:x:0:0:root:/root:/bin/bash') - allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/mysql_config_editor', 'print', '--all'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }).and_return("[local_tcp]\nuser = root\npassword = *****\nhost = 127.0.0.1\nport = 3306") - allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/mysql_config_editor', 'remove', '-G', 'local_socket'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }) - allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/my_print_defaults', '-s', 'local_tcp'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }).and_return("--user=root\n--password=secure\n--host=127.0.0.1\n--port=3306") - allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/my_print_defaults', '-s', 'local_socket'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }) - .and_return("--user=root\n--password=more_secure\n--host=localhost\n--socket=/var/run/mysql.sock") + allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/getent', 'passwd', 'root'], failonfail: true).and_return('root:x:0:0:root:/root:/bin/bash') + allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/mysql_config_editor', 'print', '--all'], failonfail: true, uid: 'root', + custom_environment: { 'HOME' => '/root' }).and_return("[local_tcp]\nuser = root\npassword = *****\nhost = 127.0.0.1\nport = 3306") + allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/mysql_config_editor', 'remove', '-G', 'local_socket'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }) + allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/my_print_defaults', '-s', 'local_tcp'], failonfail: true, uid: 'root', + custom_environment: { 'HOME' => '/root' }).and_return("--user=root\n--password=secure\n--host=127.0.0.1\n--port=3306") + allow(Puppet::Util::Execution).to receive(:execute).with(['/usr/bin/my_print_defaults', '-s', 'local_socket'], failonfail: true, uid: 'root', custom_environment: { 'HOME' => '/root' }) + .and_return("--user=root\n--password=more_secure\n--host=localhost\n--socket=/var/run/mysql.sock") - allow(Puppet::Util::SUIDManager).to receive(:asuser).with('root').and_return(`(exit 0)`) + allow(Puppet::Util::SUIDManager).to receive(:asuser).with('root').and_return(`(exit 0)`) allow(PTY).to receive(:spawn) - .with({ 'HOME' => '/root' }, + .with({ 'HOME' => '/root' }, '/usr/bin/mysql_config_editor set --skip-warn -G local_socket -h localhost -u root ' \ '-S /var/run/mysql/mysql.sock -p') - .and_return(`(exit 0)`) + .and_return(`(exit 0)`) allow(PTY).to receive(:spawn) - .with({ 'HOME' => '/root' }, + .with({ 'HOME' => '/root' }, '/usr/bin/mysql_config_editor set --skip-warn -G local_socket -h 127.0.0.1 -u root -P 3306 -p') - .and_return(`(exit 0)`) + .and_return(`(exit 0)`) end describe '#get' do diff --git a/spec/unit/puppet/provider/mysql_user/mysql_spec.rb b/spec/unit/puppet/provider/mysql_user/mysql_spec.rb index fa0a35f28..36a547114 100644 --- a/spec/unit/puppet/provider/mysql_user/mysql_spec.rb +++ b/spec/unit/puppet/provider/mysql_user/mysql_spec.rb @@ -199,7 +199,8 @@ it 'creates a user using IF NOT EXISTS' do provider.class.instance_variable_set(:@mysqld_version_string, '5.7.6') - expect(provider.class).to receive(:mysql_caller).with("CREATE USER IF NOT EXISTS 'joe'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'", 'system') + expect(provider.class).to receive(:mysql_caller).with("CREATE USER IF NOT EXISTS 'joe'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'", +'system') expect(provider.class).to receive(:mysql_caller).with("ALTER USER IF EXISTS 'joe'@'localhost' WITH MAX_USER_CONNECTIONS 10 MAX_CONNECTIONS_PER_HOUR 10 MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HOUR 10", 'system') # rubocop:disable Layout/LineLength expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' REQUIRE NONE", 'system') expect(provider).to receive(:exists?).and_return(true) @@ -292,7 +293,8 @@ end it 'changes the hash MySQL >= 5.7.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.6'][:string]) - expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH mysql_native_password AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", 'system').and_return('0') + expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH mysql_native_password AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'", +'system').and_return('0') expect(provider).to receive(:password_hash).and_return('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5') provider.password_hash = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5' @@ -369,7 +371,8 @@ context 'MySQL >= 5.7.6' do it 'changes the authentication plugin' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.6'][:string]) - expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'", 'system').and_return('0') + expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'", +'system').and_return('0') expect(provider).to receive(:plugin).and_return('mysql_native_password') provider.plugin = 'mysql_native_password' @@ -444,35 +447,40 @@ describe 'tls_options=required' do it 'adds mTLS option grant in mysql 5.5' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.5'][:string]) - expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').and_return('0') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", +'system').and_return('0') expect(provider).to receive(:tls_options).and_return(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) provider.tls_options = ['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\''] end it 'adds mTLS option grant in mysql 5.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.6'][:string]) - expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').and_return('0') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", +'system').and_return('0') expect(provider).to receive(:tls_options).and_return(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) provider.tls_options = ['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\''] end it 'adds mTLS option grant in mysql < 5.7.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.1'][:string]) - expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').and_return('0') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", +'system').and_return('0') expect(provider).to receive(:tls_options).and_return(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) provider.tls_options = ['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\''] end it 'adds mTLS option grant in mysql >= 5.7.6' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mysql-5.7.6'][:string]) - expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').and_return('0') + expect(provider.class).to receive(:mysql_caller).with("ALTER USER 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", +'system').and_return('0') expect(provider).to receive(:tls_options).and_return(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) provider.tls_options = ['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\''] end it 'adds mTLS option grant in mariadb-10.0' do provider.class.instance_variable_set(:@mysqld_version_string, mysql_version_string_hash['mariadb-10.0'][:string]) - expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", 'system').and_return('0') + expect(provider.class).to receive(:mysql_caller).with("GRANT USAGE ON *.* TO 'joe'@'localhost' REQUIRE ISSUER '/CN=Certificate Authority' AND SUBJECT '/OU=MySQL Users/CN=Username'", +'system').and_return('0') expect(provider).to receive(:tls_options).and_return(['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\'']) provider.tls_options = ['ISSUER \'/CN=Certificate Authority\'', 'SUBJECT \'/OU=MySQL Users/CN=Username\''] From bc9f070d57a6583d0112dcfd7e06d20bc953e29b Mon Sep 17 00:00:00 2001 From: daiana Date: Tue, 6 Apr 2021 17:48:20 +0300 Subject: [PATCH 05/12] Fix rubocop 2 --- spec/unit/facter/mysqld_version_spec.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spec/unit/facter/mysqld_version_spec.rb b/spec/unit/facter/mysqld_version_spec.rb index e5ca5289f..fafc197fe 100644 --- a/spec/unit/facter/mysqld_version_spec.rb +++ b/spec/unit/facter/mysqld_version_spec.rb @@ -12,7 +12,7 @@ before :each do allow(Facter::Core::Execution).to receive(:which).with('mysqld').and_return('/usr/sbin/mysqld') allow(Facter::Util::Resolution).to receive(:exec).with('mysqld --no-defaults -V 2>/dev/null') - .and_return('mysqld Ver 5.5.49-37.9 for Linux on x86_64 (Percona Server (GPL), Release 37.9, Revision efa0073)') + .and_return('mysqld Ver 5.5.49-37.9 for Linux on x86_64 (Percona Server (GPL), Release 37.9, Revision efa0073)') end it { expect(Facter.fact(:mysqld_version).value).to eq('mysqld Ver 5.5.49-37.9 for Linux on x86_64 (Percona Server (GPL), Release 37.9, Revision efa0073)') @@ -20,4 +20,3 @@ end end end - \ No newline at end of file From d9d823ecd801304e63237456958fb33b1ab9f6f8 Mon Sep 17 00:00:00 2001 From: daiana Date: Tue, 6 Apr 2021 23:13:16 +0300 Subject: [PATCH 06/12] (maint) - Set gpgcheck on 0 --- spec/acceptance/mysql_mariadb_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/acceptance/mysql_mariadb_spec.rb b/spec/acceptance/mysql_mariadb_spec.rb index 1b628b19d..e11425e50 100644 --- a/spec/acceptance/mysql_mariadb_spec.rb +++ b/spec/acceptance/mysql_mariadb_spec.rb @@ -12,7 +12,7 @@ gpgkey => 'https://yum.mariadb.org/RPM-GPG-KEY-MariaDB', descr => "MariaDB 10.4", enabled => 1, - gpgcheck => 1, + gpgcheck => 0, }-> class { '::mysql::server': require => Yumrepo['mariadb'], From 56d106f27d8b0dfca5b622d1bf6408cb137068b4 Mon Sep 17 00:00:00 2001 From: daianamezdrea <46529728+daianamezdrea@users.noreply.github.com> Date: Wed, 7 Apr 2021 11:57:55 +0300 Subject: [PATCH 07/12] test --- spec/acceptance/mysql_mariadb_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/acceptance/mysql_mariadb_spec.rb b/spec/acceptance/mysql_mariadb_spec.rb index e11425e50..03a25bd82 100644 --- a/spec/acceptance/mysql_mariadb_spec.rb +++ b/spec/acceptance/mysql_mariadb_spec.rb @@ -11,7 +11,7 @@ baseurl => "http://yum.mariadb.org/10.4/$osname${facts['os']['release']['major']}-aarch64/", gpgkey => 'https://yum.mariadb.org/RPM-GPG-KEY-MariaDB', descr => "MariaDB 10.4", - enabled => 1, + enabled => 0, gpgcheck => 0, }-> class { '::mysql::server': From 8ba146cbaa03b9cd0ffc33af60af0ed135d5a038 Mon Sep 17 00:00:00 2001 From: daianamezdrea <46529728+daianamezdrea@users.noreply.github.com> Date: Thu, 8 Apr 2021 12:09:10 +0300 Subject: [PATCH 08/12] Remove debian from testing process Update pr_test.yml test2 Update params.pp Update pr_test.yml Test for simpleproc already exists remove test Update pr_test.yml Update pr_test.yml Update pr_test.yml Delete os - es Update pr_test.yml add lsb remove debugging session Update params.pp Update spec_helper_acceptance_local.rb Restore os-es and delete Debian --- .github/workflows/pr_test.yml | 4 +- manifests/params.pp | 4 +- metadata.json | 157 ++++++++++++--------------- spec/spec_helper_acceptance_local.rb | 4 +- 4 files changed, 75 insertions(+), 94 deletions(-) diff --git a/.github/workflows/pr_test.yml b/.github/workflows/pr_test.yml index 69e414b55..d8b746625 100644 --- a/.github/workflows/pr_test.yml +++ b/.github/workflows/pr_test.yml @@ -84,7 +84,7 @@ jobs: echo 'platform=${{ matrix.platforms.image }}' >> $BUILDEVENT_FILE echo 'collection=${{ matrix.collection }}' >> $BUILDEVENT_FILE echo 'label=${{ matrix.platforms.label }}' >> $BUILDEVENT_FILE - + - name: "Honeycomb: Start recording" uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1 with: @@ -177,7 +177,7 @@ jobs: echo echo ::endgroup:: fi - + - name: "Honeycomb: Record removal times" if: ${{ always() }} run: | diff --git a/manifests/params.pp b/manifests/params.pp index 61625ec71..7d1aa640b 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -257,7 +257,8 @@ } else { $python_package_name = 'python-mysqldb' } - + + notice($::lsbdistcodename) $ruby_package_name = $::lsbdistcodename ? { 'jessie' => 'ruby-mysql', 'stretch' => 'ruby-mysql2', @@ -268,6 +269,7 @@ 'focal' => 'ruby-mysql2', default => 'libmysql-ruby', } + notice($ruby_package_name) } 'Archlinux': { diff --git a/metadata.json b/metadata.json index fe88f6c2a..d5ba852e2 100644 --- a/metadata.json +++ b/metadata.json @@ -1,90 +1,69 @@ { - "name": "puppetlabs-mysql", - "version": "11.0.0", - "author": "puppetlabs", - "summary": "Installs, configures, and manages the MySQL service.", - "license": "Apache-2.0", - "source": "git://github.com/puppetlabs/puppetlabs-mysql", - "project_page": "http://github.com/puppetlabs/puppetlabs-mysql", - "issues_url": "https://tickets.puppetlabs.com/browse/MODULES", - "dependencies": [ - { - "name": "puppetlabs/stdlib", - "version_requirement": ">= 3.2.0 < 8.0.0" - }, - { - "name": "puppetlabs/translate", - "version_requirement": ">= 1.0.0 < 3.0.0" - }, - { - "name": "puppetlabs/resource_api", - "version_requirement": ">= 1.0.0 < 2.0.0" - } - ], - "operatingsystem_support": [ - { - "operatingsystem": "RedHat", - "operatingsystemrelease": [ - "6", - "7", - "8" - ] - }, - { - "operatingsystem": "CentOS", - "operatingsystemrelease": [ - "6", - "7", - "8" - ] - }, - { - "operatingsystem": "OracleLinux", - "operatingsystemrelease": [ - "6", - "7" - ] - }, - { - "operatingsystem": "Scientific", - "operatingsystemrelease": [ - "6", - "7" - ] - }, - { - "operatingsystem": "SLES", - "operatingsystemrelease": [ - "12", - "15" - ] - }, - { - "operatingsystem": "Debian", - "operatingsystemrelease": [ - "8", - "9", - "10" - ] - }, - { - "operatingsystem": "Ubuntu", - "operatingsystemrelease": [ - "14.04", - "16.04", - "18.04", - "20.04" - ] - } - ], - "requirements": [ - { - "name": "puppet", - "version_requirement": ">= 6.0.0 < 8.0.0" - } - ], - "description": "MySQL module", - "template-url": "https://github.com/puppetlabs/pdk-templates#main", - "template-ref": "heads/main-0-g7be43a3", - "pdk-version": "1.18.1" -} + "name": "puppetlabs-mysql", + "version": "11.0.1", + "author": "puppetlabs", + "summary": "Installs, configures, and manages the MySQL service.", + "license": "Apache-2.0", + "source": "git://github.com/puppetlabs/puppetlabs-mysql", + "project_page": "http://github.com/puppetlabs/puppetlabs-mysql", + "issues_url": "https://tickets.puppetlabs.com/browse/MODULES", + "dependencies": [{ + "name": "puppetlabs/stdlib", + "version_requirement": ">= 3.2.0 < 8.0.0" + }], + "operatingsystem_support": [{ + "operatingsystem": "RedHat", + "operatingsystemrelease": [ + "6", + "7", + "8" + ] + }, + { + "operatingsystem": "CentOS", + "operatingsystemrelease": [ + "6", + "7", + "8" + ] + }, + { + "operatingsystem": "OracleLinux", + "operatingsystemrelease": [ + "6", + "7" + ] + }, + { + "operatingsystem": "Scientific", + "operatingsystemrelease": [ + "6", + "7" + ] + }, + { + "operatingsystem": "SLES", + "operatingsystemrelease": [ + "12", + "15" + ] + }, + { + "operatingsystem": "Ubuntu", + "operatingsystemrelease": [ + "14.04", + "16.04", + "18.04", + "20.04" + ] + } + ], + "requirements": [{ + "name": "puppet", + "version_requirement": ">= 6.0.0 < 8.0.0" + }], + "description": "MySQL module", + "template-url": "https://github.com/puppetlabs/pdk-templates#main", + "template-ref": "heads/main-0-g44cc7ed", + "pdk-version": "1.18.1" +} \ No newline at end of file diff --git a/spec/spec_helper_acceptance_local.rb b/spec/spec_helper_acceptance_local.rb index 9604b11fa..5e5e127ff 100644 --- a/spec/spec_helper_acceptance_local.rb +++ b/spec/spec_helper_acceptance_local.rb @@ -37,9 +37,9 @@ def export_locales RSpec.configure do |c| c.before :suite do - if os[:family] == 'debian' || os[:family] == 'ubuntu' + if os[:family] == 'debian' # needed for the puppet fact - LitmusHelper.instance.apply_manifest("package { 'lsb-release': ensure => installed, }", expect_failures: false) + LitmusHelper.instance.apply_manifest("package { 'ap': ensure => installed, }", expect_failures: false) end # needed for the grant tests, not installed on el7 docker images LitmusHelper.instance.apply_manifest("package { 'which': ensure => installed, }", expect_failures: false) From 4ccb94a0f617562ec25f9df066e7cdd6ad9dfd32 Mon Sep 17 00:00:00 2001 From: daiana Date: Wed, 28 Apr 2021 14:37:50 +0300 Subject: [PATCH 09/12] Replace lsbdistcodename with operatingsystemmajrelease in order to avoid warning --- manifests/params.pp | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/manifests/params.pp b/manifests/params.pp index 7d1aa640b..51f5b0d82 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -147,8 +147,7 @@ } } default: { - fail(translate('Unsupported platform: puppetlabs-%{module_name} currently doesn\'t support %{os}.', - { 'module_name' => $module_name, 'os' => $::operatingsystem })) + fail("Unsupported platform: puppetlabs-${module_name} currently doesn\'t support ${::operatingsystem}.") } } $config_file = '/etc/my.cnf' @@ -257,20 +256,18 @@ } else { $python_package_name = 'python-mysqldb' } - - notice($::lsbdistcodename) - $ruby_package_name = $::lsbdistcodename ? { - 'jessie' => 'ruby-mysql', - 'stretch' => 'ruby-mysql2', - 'buster' => 'ruby-mysql2', - 'trusty' => 'ruby-mysql', - 'xenial' => 'ruby-mysql', - 'bionic' => 'ruby-mysql2', - 'focal' => 'ruby-mysql2', - default => 'libmysql-ruby', - } - notice($ruby_package_name) - } + + $ruby_package_name = $facts['operatingsystemmajrelease'] ? { + '8' => 'ruby-mysql', # jessie + '9' => 'ruby-mysql2', # stretch + '10' => 'ruby-mysql2', # buster + '14.04' => 'ruby-mysql', # trusty + '16.04' => 'ruby-mysql', # xenial + '18.04' => 'ruby-mysql2', # bionic + '20.04' => 'ruby-mysql2', # focal + default => 'libmysql-ruby', + } + } 'Archlinux': { $daemon_dev_package_name = undef @@ -480,8 +477,7 @@ } default: { - fail(translate('Unsupported platform: puppetlabs-%{module_name} currently doesn\'t support %{osfamily} or %{os}.', - { 'module_name' => $module_name, 'os' => $::operatingsystem, 'osfamily' => $::osfamily })) + fail("Unsupported platform: puppetlabs-${module_name} currently doesn\'t support ${::osfamily} or ${::operatingsystem}.") } } } @@ -581,6 +577,6 @@ ## Additional graceful failures if $::osfamily == 'RedHat' and $::operatingsystemmajrelease == '4' and $::operatingsystem != 'Amazon' { - fail(translate('Unsupported platform: puppetlabs-%{module_name} only supports RedHat 5.0 and beyond.', { 'module_name' => $module_name })) + fail("Unsupported platform: puppetlabs-${module_name} only supports RedHat 5.0 and beyond.") } -} +} \ No newline at end of file From 24dc14445bf22629d11ab9c4a935f55454c15c1b Mon Sep 17 00:00:00 2001 From: daiana Date: Wed, 28 Apr 2021 14:51:16 +0300 Subject: [PATCH 10/12] PDK update Add ubuntu condition back Add lsb-release dependency Fix lsb Update spec_helper_acceptance_local.rb --- .github/workflows/auto_release.yml | 7 +- .github/workflows/pr_test.yml | 4 +- .github/workflows/release.yml | 4 +- .gitignore | 1 + .gitpod.yml | 2 +- .pdkignore | 1 + Gemfile | 10 -- manifests/params.pp | 7 +- metadata.json | 139 ++++++++++++++------------- spec/spec_helper_acceptance_local.rb | 2 +- 10 files changed, 90 insertions(+), 87 deletions(-) diff --git a/.github/workflows/auto_release.yml b/.github/workflows/auto_release.yml index affeca907..d15d148d9 100644 --- a/.github/workflows/auto_release.yml +++ b/.github/workflows/auto_release.yml @@ -66,7 +66,12 @@ jobs: branch: "release-prep" delete-branch: true title: "Release prep v${{ steps.gv.outputs.ver }}" - body: "Automated release-prep through [pdk-templates](https://github.com/puppetlabs/pdk-templates/blob/main/moduleroot/.github/workflows/auto_release.yml.erb) from commit ${{ github.sha }}" + body: | + Automated release-prep through [pdk-templates](https://github.com/puppetlabs/pdk-templates/blob/main/moduleroot/.github/workflows/auto_release.yml.erb) from commit ${{ github.sha }}. + Please verify before merging: + - [ ] last [nightly](https://github.com/${{ github.repository }}/actions/workflows/nightly.yml) run is green + - [ ] [Changelog](https://github.com/${{ github.repository }}/blob/release-prep/CHANGELOG.md) is readable and has no unlabeled pull requests + - [ ] Ensure the [changelog](https://github.com/${{ github.repository }}/blob/release-prep/CHANGELOG.md) version and [metadata](https://github.com/${{ github.repository }}/blob/release-prep/metadata.json) version match labels: "maintenance" - name: PR outputs diff --git a/.github/workflows/pr_test.yml b/.github/workflows/pr_test.yml index d8b746625..69e414b55 100644 --- a/.github/workflows/pr_test.yml +++ b/.github/workflows/pr_test.yml @@ -84,7 +84,7 @@ jobs: echo 'platform=${{ matrix.platforms.image }}' >> $BUILDEVENT_FILE echo 'collection=${{ matrix.collection }}' >> $BUILDEVENT_FILE echo 'label=${{ matrix.platforms.label }}' >> $BUILDEVENT_FILE - + - name: "Honeycomb: Start recording" uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1 with: @@ -177,7 +177,7 @@ jobs: echo echo ::endgroup:: fi - + - name: "Honeycomb: Record removal times" if: ${{ always() }} run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1509f6e91..76cf31ca1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -38,10 +38,10 @@ jobs: ref: ${{ github.ref }} clean: true - name: "PDK Build" - uses: docker://puppet/pdk:nightly + uses: docker://puppet/pdk:2.1.0.0 with: args: 'build' - name: "Push to Forge" - uses: docker://puppet/pdk:nightly + uses: docker://puppet/pdk:2.1.0.0 with: args: 'release publish --forge-token ${{ secrets.FORGE_API_KEY }} --force' diff --git a/.gitignore b/.gitignore index 2767022cd..988dcbbe6 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ .project .envrc /inventory.yaml +/spec/fixtures/litmus_inventory.yaml diff --git a/.gitpod.yml b/.gitpod.yml index 18406c508..9d89d9faa 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -6,4 +6,4 @@ tasks: vscode: extensions: - - puppet.puppet-vscode@1.0.0:oSzfTkDf6Cmc1jOjgW33VA== + - puppet.puppet-vscode@1.2.0:f5iEPbmOj6FoFTOV6q8LTg== diff --git a/.pdkignore b/.pdkignore index a74c4c4f3..33a13477b 100644 --- a/.pdkignore +++ b/.pdkignore @@ -25,6 +25,7 @@ .project .envrc /inventory.yaml +/spec/fixtures/litmus_inventory.yaml /appveyor.yml /.fixtures.yml /Gemfile diff --git a/Gemfile b/Gemfile index ae2b430dc..135373d02 100644 --- a/Gemfile +++ b/Gemfile @@ -45,16 +45,6 @@ gems['puppet'] = location_for(puppet_version) gems['facter'] = location_for(facter_version) if facter_version gems['hiera'] = location_for(hiera_version) if hiera_version -if Gem.win_platform? && puppet_version =~ %r{^(file:///|git://)} - # If we're using a Puppet gem on Windows which handles its own win32-xxx gem - # dependencies (>= 3.5.0), set the maximum versions (see PUP-6445). - gems['win32-dir'] = ['<= 0.4.9', require: false] - gems['win32-eventlog'] = ['<= 0.6.5', require: false] - gems['win32-process'] = ['<= 0.7.5', require: false] - gems['win32-security'] = ['<= 0.2.5', require: false] - gems['win32-service'] = ['0.8.8', require: false] -end - gems.each do |gem_name, gem_params| gem gem_name, *gem_params end diff --git a/manifests/params.pp b/manifests/params.pp index 51f5b0d82..39e79a3e9 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -257,7 +257,7 @@ $python_package_name = 'python-mysqldb' } - $ruby_package_name = $facts['operatingsystemmajrelease'] ? { + $ruby_package_name = $facts['operatingsystemmajrelease'] ? { '8' => 'ruby-mysql', # jessie '9' => 'ruby-mysql2', # stretch '10' => 'ruby-mysql2', # buster @@ -267,7 +267,8 @@ '20.04' => 'ruby-mysql2', # focal default => 'libmysql-ruby', } - } + + } 'Archlinux': { $daemon_dev_package_name = undef @@ -579,4 +580,4 @@ if $::osfamily == 'RedHat' and $::operatingsystemmajrelease == '4' and $::operatingsystem != 'Amazon' { fail("Unsupported platform: puppetlabs-${module_name} only supports RedHat 5.0 and beyond.") } -} \ No newline at end of file +} diff --git a/metadata.json b/metadata.json index 31b140df8..5707cd995 100644 --- a/metadata.json +++ b/metadata.json @@ -1,69 +1,74 @@ { - "name": "puppetlabs-mysql", - "version": "11.0.1", - "author": "puppetlabs", - "summary": "Installs, configures, and manages the MySQL service.", - "license": "Apache-2.0", - "source": "git://github.com/puppetlabs/puppetlabs-mysql", - "project_page": "http://github.com/puppetlabs/puppetlabs-mysql", - "issues_url": "https://tickets.puppetlabs.com/browse/MODULES", - "dependencies": [{ - "name": "puppetlabs/stdlib", - "version_requirement": ">= 3.2.0 < 8.0.0" - }], - "operatingsystem_support": [{ - "operatingsystem": "RedHat", - "operatingsystemrelease": [ - "6", - "7", - "8" - ] - }, - { - "operatingsystem": "CentOS", - "operatingsystemrelease": [ - "6", - "7", - "8" - ] - }, - { - "operatingsystem": "OracleLinux", - "operatingsystemrelease": [ - "6", - "7" - ] - }, - { - "operatingsystem": "Scientific", - "operatingsystemrelease": [ - "6", - "7" - ] - }, - { - "operatingsystem": "SLES", - "operatingsystemrelease": [ - "12", - "15" - ] - }, - { - "operatingsystem": "Ubuntu", - "operatingsystemrelease": [ - "14.04", - "16.04", - "18.04", - "20.04" - ] - } - ], - "requirements": [{ - "name": "puppet", - "version_requirement": ">= 6.0.0 < 8.0.0" - }], - "description": "MySQL module", - "template-url": "https://github.com/puppetlabs/pdk-templates#main", - "template-ref": "heads/main-0-g44cc7ed", - "pdk-version": "1.18.1" + "name": "puppetlabs-mysql", + "version": "11.0.1", + "author": "puppetlabs", + "summary": "Installs, configures, and manages the MySQL service.", + "license": "Apache-2.0", + "source": "git://github.com/puppetlabs/puppetlabs-mysql", + "project_page": "http://github.com/puppetlabs/puppetlabs-mysql", + "issues_url": "https://tickets.puppetlabs.com/browse/MODULES", + "dependencies": [ + { + "name": "puppetlabs/stdlib", + "version_requirement": ">= 3.2.0 < 8.0.0" + } + ], + "operatingsystem_support": [ + { + "operatingsystem": "RedHat", + "operatingsystemrelease": [ + "6", + "7", + "8" + ] + }, + { + "operatingsystem": "CentOS", + "operatingsystemrelease": [ + "6", + "7", + "8" + ] + }, + { + "operatingsystem": "OracleLinux", + "operatingsystemrelease": [ + "6", + "7" + ] + }, + { + "operatingsystem": "Scientific", + "operatingsystemrelease": [ + "6", + "7" + ] + }, + { + "operatingsystem": "SLES", + "operatingsystemrelease": [ + "12", + "15" + ] + }, + { + "operatingsystem": "Ubuntu", + "operatingsystemrelease": [ + "14.04", + "16.04", + "18.04", + "20.04" + ] + } + ], + "requirements": [ + { + "name": "puppet", + "version_requirement": ">= 6.0.0 < 8.0.0" + } + ], + "description": "MySQL module", + "template-url": "https://github.com/puppetlabs/pdk-templates#main", + "template-ref": "heads/main-0-ge04486b", + "pdk-version": "2.1.0" } diff --git a/spec/spec_helper_acceptance_local.rb b/spec/spec_helper_acceptance_local.rb index 5e5e127ff..747ec15ca 100644 --- a/spec/spec_helper_acceptance_local.rb +++ b/spec/spec_helper_acceptance_local.rb @@ -37,7 +37,7 @@ def export_locales RSpec.configure do |c| c.before :suite do - if os[:family] == 'debian' + if os[:family] == 'debian' || os[:family] == 'ubuntu' # needed for the puppet fact LitmusHelper.instance.apply_manifest("package { 'ap': ensure => installed, }", expect_failures: false) end From 31b640b97cce3f15b76900809fe99b6c0eda2364 Mon Sep 17 00:00:00 2001 From: daiana Date: Thu, 29 Apr 2021 12:20:55 +0300 Subject: [PATCH 11/12] Repair spec tests --- manifests/params.pp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/manifests/params.pp b/manifests/params.pp index 39e79a3e9..5d5247a11 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -258,16 +258,15 @@ } $ruby_package_name = $facts['operatingsystemmajrelease'] ? { - '8' => 'ruby-mysql', # jessie - '9' => 'ruby-mysql2', # stretch - '10' => 'ruby-mysql2', # buster - '14.04' => 'ruby-mysql', # trusty - '16.04' => 'ruby-mysql', # xenial - '18.04' => 'ruby-mysql2', # bionic - '20.04' => 'ruby-mysql2', # focal - default => 'libmysql-ruby', - } - + '8' => 'ruby-mysql', # jessie + '9' => 'ruby-mysql2', # stretch + '10' => 'ruby-mysql2', # buster + '14.04' => 'ruby-mysql', # trusty + '16.04' => 'ruby-mysql', # xenial + '18.04' => 'ruby-mysql2', # bionic + '20.04' => 'ruby-mysql2', # focal + default => 'libmysql-ruby', + } } 'Archlinux': { From 44bf2b8c804d1848c7bde4b9bbe2d5269067e199 Mon Sep 17 00:00:00 2001 From: daianamezdrea <46529728+daianamezdrea@users.noreply.github.com> Date: Thu, 29 Apr 2021 13:05:34 +0300 Subject: [PATCH 12/12] lsb dependency --- spec/spec_helper_acceptance_local.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/spec_helper_acceptance_local.rb b/spec/spec_helper_acceptance_local.rb index 747ec15ca..2ac5a08e7 100644 --- a/spec/spec_helper_acceptance_local.rb +++ b/spec/spec_helper_acceptance_local.rb @@ -39,6 +39,7 @@ def export_locales c.before :suite do if os[:family] == 'debian' || os[:family] == 'ubuntu' # needed for the puppet fact + LitmusHelper.instance.apply_manifest("package { 'lsb-release': ensure => installed, }", expect_failures: false) LitmusHelper.instance.apply_manifest("package { 'ap': ensure => installed, }", expect_failures: false) end # needed for the grant tests, not installed on el7 docker images