From cbdf4234ef6ac7576a083c2b4ac90c3e2b404611 Mon Sep 17 00:00:00 2001 From: Neil Anderson Date: Mon, 15 Apr 2024 13:28:33 +0100 Subject: [PATCH] (PE-37233) Adding add_compiler to test matrix Updated add_compiler spec to check compiler has been added and puppet run before running add compiler Added test matrix for add compiler --- .../workflows/test-add-compiler-matrix.yml | 123 ++++++++++++++++++ .github/workflows/test-add-compiler.yaml | 7 +- .../peadm_spec/plans/add_compiler.pp | 44 ++++++- .../plans/provision_test_cluster.pp | 3 + 4 files changed, 167 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/test-add-compiler-matrix.yml diff --git a/.github/workflows/test-add-compiler-matrix.yml b/.github/workflows/test-add-compiler-matrix.yml new file mode 100644 index 00000000..534d97f6 --- /dev/null +++ b/.github/workflows/test-add-compiler-matrix.yml @@ -0,0 +1,123 @@ +--- +name: "Add compiler matrix" + +on: + pull_request: + paths: + - ".github/workflows/**/*" + - "spec/**/*" + - "lib/**/*" + - "tasks/**/*" + - "functions/**/*" + - "types/**/*" + - "plans/**/*" + - "hiera/**/*" + - "manifests/**/*" + - "templates/**/*" + - "files/**/*" + - "metadata.json" + - "Rakefile" + - "Gemfile" + - "provision.yaml" + - ".rspec" + - ".rubocop.yml" + - ".puppet-lint.rc" + - ".fixtures.yml" + branches: [main] + workflow_dispatch: {} + +jobs: + test-add-compiler: + name: "PE ${{ matrix.version }} ${{ matrix.architecture }} on ${{ matrix.image }}" + runs-on: ubuntu-20.04 + env: + BOLT_GEM: true + BOLT_DISABLE_ANALYTICS: true + LANG: "en_US.UTF-8" + strategy: + fail-fast: false + matrix: + architecture: + - standard + - large + - extra-large + version: + - 2021.7.7 + - 2023.6.0 + image: + - centos-7 + - almalinux-cloud/almalinux-8 + steps: + - name: "Checkout Source" + uses: actions/checkout@v2 + + - name: "Activate Ruby 2.7" + uses: ruby/setup-ruby@v1 + with: + ruby-version: "2.7" + bundler-cache: true + + - name: "Print bundle environment" + if: ${{ github.repository_owner == 'puppetlabs' }} + run: | + echo ::group::info:bundler + bundle env + echo ::endgroup:: + + - name: "Provision test cluster" + timeout-minutes: 15 + run: | + echo ::group::prepare + mkdir -p $HOME/.ssh + echo 'Host *' > $HOME/.ssh/config + echo ' ServerAliveInterval 150' >> $HOME/.ssh/config + echo ' ServerAliveCountMax 2' >> $HOME/.ssh/config + bundle exec rake spec_prep + echo ::endgroup:: + + echo ::group::provision + bundle exec bolt plan run peadm_spec::provision_test_cluster \ + --modulepath spec/fixtures/modules \ + provider=provision_service \ + image=${{ matrix.image }} \ + architecture=${{ matrix.architecture }}-with-extra-compiler + echo ::endgroup:: + + echo ::group::info:request + cat request.json || true; echo + echo ::endgroup:: + + echo ::group::info:inventory + sed -e 's/password: .*/password: "[redacted]"/' < spec/fixtures/litmus_inventory.yaml || true + echo ::endgroup:: + + - name: "Install PE on test cluster" + timeout-minutes: 120 + run: | + bundle exec bolt plan run peadm_spec::install_test_cluster \ + --inventoryfile spec/fixtures/litmus_inventory.yaml \ + --modulepath spec/fixtures/modules \ + architecture=${{ matrix.architecture }} \ + version=${{ matrix.version }} + + - name: 'Run add_compiler plan' + timeout-minutes: 50 + run: | + bundle exec bolt plan run peadm_spec::add_compiler -v \ + --inventoryfile spec/fixtures/litmus_inventory.yaml \ + --modulepath spec/fixtures/modules \ + architecture=${{ matrix.architecture }} + + - name: 'Tear down test cluster' + if: ${{ always() }} + continue-on-error: true + run: | + if [ -f spec/fixtures/litmus_inventory.yaml ]; then + echo ::group::tear_down + bundle exec rake 'litmus:tear_down' + echo ::endgroup:: + + echo ::group::info:request + cat request.json || true; echo + echo ::endgroup:: + fi diff --git a/.github/workflows/test-add-compiler.yaml b/.github/workflows/test-add-compiler.yaml index 2d8efe4e..7515b372 100644 --- a/.github/workflows/test-add-compiler.yaml +++ b/.github/workflows/test-add-compiler.yaml @@ -63,7 +63,7 @@ jobs: bundle env echo ::endgroup:: - - name: 'Provision test cluster (specified architecture with added DR)' + - name: 'Provision test cluster (specified architecture with added compiler)' timeout-minutes: 15 run: | echo ::group::prepare @@ -100,12 +100,13 @@ jobs: version=${{ matrix.version }} - name: 'Run add_compiler plan' - timeout-minutes: 30 + timeout-minutes: 50 run: | bundle exec bolt plan run peadm_spec::add_compiler -v \ --inventoryfile spec/fixtures/litmus_inventory.yaml \ --modulepath spec/fixtures/modules \ - architecture=${{ matrix.architecture }} + architecture=${{ matrix.architecture }} \ + --stream - name: 'Wait as long as the file ${HOME}/pause file is present' if: ${{ always() && github.event.inputs.ssh-debugging == 'true' }} diff --git a/spec/acceptance/peadm_spec/plans/add_compiler.pp b/spec/acceptance/peadm_spec/plans/add_compiler.pp index 431371b3..a78a3dca 100644 --- a/spec/acceptance/peadm_spec/plans/add_compiler.pp +++ b/spec/acceptance/peadm_spec/plans/add_compiler.pp @@ -10,27 +10,57 @@ $target.set_var('certname', $fqdn.first['stdout'].chomp) } + $primary_host = $t.filter |$n| { $n.vars['role'] == 'primary' } + $compiler_host = $t.filter |$n| { $n.vars['role'] == 'unconfigured-compiler' } + $compiler_fqdn = run_command('hostname -f', $compiler_host).first['stdout'].chomp + + run_task('peadm::puppet_runonce', $primary_host) + $common_params = { avail_group_letter => 'A', } $arch_params = case $architecture { + 'standard': {{ + primary_host => $primary_host, + primary_postgresql_host => $primary_host, + compiler_host => $compiler_host, + }} 'large': {{ - primary_host => $t.filter |$n| { $n.vars['role'] == 'primary' }, - primary_postgresql_host => $t.filter |$n| { $n.vars['role'] == 'primary' }, - compiler_host => $t.filter |$n| { $n.vars['role'] == 'unconfigured-compiler' }, + primary_host => $primary_host, + primary_postgresql_host => $primary_host, + compiler_host => $compiler_host, }} 'extra-large': {{ - primary_host => $t.filter |$n| { $n.vars['role'] == 'primary' }, + primary_host => $primary_host, primary_postgresql_host => $t.filter |$n| { $n.vars['role'] == 'primary-pdb-postgresql' }, - compiler_host => $t.filter |$n| { $n.vars['role'] == 'unconfigured-compiler' }, + compiler_host => $compiler_host, }} default: { fail('Invalid architecture!') } } - $result = - run_plan('peadm::add_compiler', $arch_params + $common_params) + $compiler_count_query = 'inventory[count()] { trusted.extensions.pp_auth_role = "pe_compiler"}' + $query_result = run_command("/opt/puppetlabs/bin/puppet query \'${compiler_count_query}\'", $primary_host).first['stdout'] + $first_count = parsejson($query_result)[0]['count'] + + $result = run_plan('peadm::add_compiler', $arch_params + $common_params) + + $query_result2 = run_command("/opt/puppetlabs/bin/puppet query \'${compiler_count_query}\'", $primary_host).first['stdout'] + $second_count = parsejson($query_result2)[0]['count'] + + $compiler_query = "inventory[certname] { trusted.extensions.pp_auth_role = \"pe_compiler\" and certname = \"${compiler_fqdn}\"}" + + $compiler_json = run_command("/opt/puppetlabs/bin/puppet query \'${compiler_query}\'", $primary_host).first['stdout'] + $compiler = parsejson($compiler_json) + + if $first_count + 1 != $second_count { + fail('Compiler count did not increase') + } + + if $compiler == [] { + fail('Compiler not found') + } return($result) } diff --git a/spec/acceptance/peadm_spec/plans/provision_test_cluster.pp b/spec/acceptance/peadm_spec/plans/provision_test_cluster.pp index a3a18d4e..bce84258 100644 --- a/spec/acceptance/peadm_spec/plans/provision_test_cluster.pp +++ b/spec/acceptance/peadm_spec/plans/provision_test_cluster.pp @@ -23,6 +23,9 @@ 'extra-large-with-dr': { ['primary', 'primary-pdb-postgresql', 'compiler', 'replica', 'replica-pdb-postgresql', 'compiler'] } + 'standard-with-extra-compiler': { + ['primary', 'unconfigured-compiler'] + } 'large-with-extra-compiler': { ['primary', 'compiler', 'unconfigured-compiler'] }